開心生活站

位置:首頁 > IT科技 > 

java,blob

IT科技2.93W

<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>

java blob是什麼,讓我們一起了解一下?

Blob是計算機視覺圖像中的一塊連通區域,Blob分析的就是對前景或背景分離後的二值圖像,進行連通域提取和標記以及計算Blob的一些相關特徵,而且通過Blob提取,還可以獲得相關區域的信息。

Blob分析的重要一個步驟是連通區域的確定,那麼它的優缺點是什麼?

優點:

Blob在目標跟蹤的優勢有:

1、通過Blob提取,可以獲得相關區域的信息,這些信息可以作爲邊緣監測器或者角點檢測器的補充信息。在目標識別中,Blob可以提供局部的統計信息和外貌信息,這些信息能夠爲目標識別和跟蹤提供依據。

2、可以利用Blob對直方圖進行峯值檢測。

3、Blob還可以作爲紋理分析和紋理識別的基元。

4、通過Blob分析,可以得到目標的個數及其所在區域,在進行目標匹配時,不需要對全局圖像進行搜索。

java 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();}}}

標籤:blob java