java blob是什么,讓我們一起了解一下?
Blob是計算機視覺圖像中的一塊連通區域,Blob分析的就是對前景或背景分離后的二值圖像,進行連通域提取和標記以及計算Blob的一些相關特征,而且通過Blob提取,還可以獲得相關區域的信息。
Blob分析的重要一個步驟是連通區域的確定,那么它的優缺點是什么?
優點:
Blob在目標跟蹤的優勢有:
1、通過Blob提取,可以獲得相關區域的信息,這些信息可以作為邊緣監測器或者角點檢測器的補充信息。在目標識別中,Blob可以提供局部的統計信息和外貌信息,這些信息能夠為目標識別和跟蹤提供依據。
2、可以利用Blob對直方圖進行峰值檢測。
3、Blob還可以作為紋理分析和紋理識別的基元。
4、通過Blob分析,可以得到目標的個數及其所在區域,在進行目標匹配時,不需要對全局圖像進行搜索。
缺點:
1、速度過慢,要整個區域作逐點掃描。
2、Blob分析難度大。這是一純幾何學上的問題,一個不規則的形狀,如何計算它的面積、大小沒有簡單易行的算法,太過復雜,運算時間就長,速度就更慢了。
3、實際應用。Blob算法在實際應用中,非常依賴光源。幾乎可以說,Blob算法如果離開了一個可靠的光源設計,則完全不起作用。
那么java是怎樣對Blob讀寫的?示例如下:
package?com.you.sister; ? import?java.io.BufferedInputStream; import?java.io.BufferedOutputStream; import?java.io.DataOutputStream; import?java.io.File; import?java.io.FileInputStream; import?java.io.FileOutputStream; import?java.io.InputStream; import?java.sql.Blob; import?java.sql.Connection; import?java.sql.DriverManager; import?java.sql.PreparedStatement; import?java.sql.ResultSet; import?java.util.Properties; ? public?class?BlobTest?{ ? public?static?Connection?conn; public?static?Connection?getConn()?throws?Exception?{ FileInputStream?fis?=?new?FileInputStream(new?File("jdbc.properties")); Properties?prop?=?new?Properties(); prop.load(fis); String?driver?=?prop.getProperty("jdbc.driver"); String?url?=?prop.getProperty("jdbc.url"); String?username?=?prop.getProperty("jdbc.username"); String?password?=?prop.getProperty("jdbc.password"); Class.forName(driver); return??DriverManager.getConnection(url,?username,?password); } public?static?void?main(String[]?args)?throws?Exception?{ conn?=?getConn(); readBlob(); writeBlob(); conn.close(); } /** *?從數據庫中讀大對象出來 *?保存在本地 */ public?static?void?readBlob()?{ try?{ String?readSql?=?"select?*?from?emp?where?empno?=??"; PreparedStatement?ps?=?conn.prepareStatement(readSql); ps.setInt(1,?7369); ResultSet?rs?=?ps.executeQuery(); while?(rs.next())?{ Blob?image?=?rs.getBlob("image"); DataOutputStream?dos?=? //?在FileOutputStream中指定文件輸出路徑 new?DataOutputStream(new?FileOutputStream(7369?+?"_image.jpeg")); InputStream?fis?=?image.getBinaryStream(); int?out; byte[]?outByte?=?new?byte?[100]; //?將blob對象輸入流寫入本地輸出流中 while?((out?=?fis.read(outByte))?!=?-1)?{ dos.write(outByte); } fis.close(); dos.flush(); dos.close(); } rs.close(); ps.close(); }?catch?(Exception?e)?{ e.printStackTrace(); } } /** *?將大對象文件保存進數據庫中 */ public?static?void?writeBlob()?{ try?{ BufferedInputStream?fis?=? new?BufferedInputStream(new?FileInputStream(new?File("D:\\Tulips.jpg"))); //?如果是新插入字段,則將大對象對應字段插入為empty_clob(); //?如果是修改,則可以先update?該行數據,將大對象對應字段設置為empty_clob(); String?writeSql?=?"select?*?from?emp?where?empno?=???for?update"; PreparedStatement?ps?=?conn.prepareStatement(writeSql); ps.setInt(1,?7499); conn.setAutoCommit(false); ResultSet?rs?=?ps.executeQuery(); while?(rs.next())?{ oracle.sql.BLOB?image?=?(oracle.sql.BLOB)rs.getBlob("image"); BufferedOutputStream?bos?=?new?BufferedOutputStream(image.getBinaryOutputStream()); int?c; //?將實際文件中的內容以二進制的形式來輸出到blob對象對應的輸出流中 while?((c?=?fis.read())?!=?-1)?{ bos.write(c); } fis.close(); bos.close(); } conn.commit(); rs.close(); ps.close(); }?catch?(Exception?e)?{ e.printStackTrace(); } } }
以上就是小編今天的分享了,希望可以幫助到大家。