
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();
}
}
}以上就是小編今天的分享了,希望可以幫助到大家。
