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