图片对比的另一种方式是通过将图片每一个像素的RGB值提取出来,然后比较两个图片每一个像素的RGB值;该方法的问题是速度比较慢,需要消耗较大的空间;
private static InputStream getImageStreamFromWeb(String urlAddress) {
URL url = null;
HttpURLConnection conn = null;
try {
url = new URL(urlAddress);
conn = (HttpURLConnection) url.openConnection();
if (conn.getResponseCode() == 200) {
InputStream in = conn.getInputStream();
return in;
} else {
throw new PictureNotFoundError("can not found #ADD# picture: "
+ urlAddress);
}
} catch (Exception e) {
}
return null;
}
public static String[][] getPX(InputStream in) {
int[] rgb = new int[3];
BufferedImage bi = null;
try {
bi = ImageIO.read(in);
} catch (Exception e) {
e.printStackTrace();
}
int width = bi.getWidth();
int height = bi.getHeight();
int minx = bi.getMinX();
int miny = bi.getMinY();
String[][] list = new String[width][height];
for (int i = minx; i < width; i++) {
for (int j = miny; j < height; j++) {
int pixel = bi.getRGB(i, j);
rgb[0] = (pixel & 0xff0000) >> 16;
rgb[1] = (pixel & 0xff00) >> 8;
rgb[2] = (pixel & 0xff);
list[i][j] = rgb[0] + "," + rgb[1] + "," + rgb[2];
}
}
rgb = null;
return list;
}
public static boolean compareImage(InputStream img1, InputStream img2) {
// 分析图片相似度 begin
String[][] list1 = getPX(img1);
String[][] list2 = getPX(img2);
int xiangsi = 0;
int busi = 0;
int i = 0, j = 0;
for (String[] strings : list1) {
if ((i + 1) == list1.length) {
continue;
}
for (int m = 0; m < strings.length; m++) {
try {
String[] value1 = list1[i][j].toString().split(",");
String[] value2 = list2[i][j].toString().split(",");
int k = 0;
for (int n = 0; n < value2.length; n++) {
if (Math.abs(Integer.parseInt(value1[k])
- Integer.parseInt(value2[k])) < 5) {
xiangsi++;
} else {
busi++;
}
}
} catch (RuntimeException e) {
continue;
}
j++;
}
i++;
}
list1 = list2;
list2 = list1;
i = 0;
j = 0;
for (String[] strings : list1) {
if ((i + 1) == list1.length) {
continue;
}
for (int m = 0; m < strings.length; m++) {
try {
String[] value1 = list1[i][j].toString().split(",");
String[] value2 = list2[i][j].toString().split(",");
int k = 0;
for (int n = 0; n < value2.length; n++) {
if (Math.abs(Integer.parseInt(value1[k])
- Integer.parseInt(value2[k])) < 5) {
xiangsi++;
} else {
busi++;
}
}
} catch (RuntimeException e) {
continue;
}
j++;
}
i++;
}
String baifen = "";
try {
baifen = ((Double.parseDouble(xiangsi + "") / Double
.parseDouble((busi + xiangsi) + "")) + "");
baifen = baifen.substring(baifen.indexOf(".") + 1, baifen
.indexOf(".") + 3);
} catch (Exception e) {
baifen = "0";
}
if (baifen.length() <= 0) {
baifen = "0";
}
if (busi == 0) {
baifen = "100";
}
list1 = null;
list2 = null;
if (!baifen.equals("100")) {
return false;
} else {
return true;
}
}
分享到:
相关推荐
2张对比图片 FaceMatch类 import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class FaceMatch{ /** * 重要提示代码中所需工具类 * FileUtil,Ba
该jar中内放了实现功能的class,代码比较易于理解,可以直观的看出效果
文本比对js-配合 CodeMirror.MergeView方法使用
代码比对工具-WinMerge代码比对工具-WinMerge代码比对工具-WinMerge代码比对工具-WinMerge代码比对工具-WinMerge代码比对工具-WinMerge
public void CompareAndMarkDiff(String imagePath1, String imagePath2);
Python使用OPencv进行图片像素比对,Python使用OPencv进行图片像素比对,Python使用OPencv进行图片像素比对,Python使用OPencv进行图片像素比对,
1. 两个 MYSQL 数据库对象结构比对工具 (比如:本地测试库、远程运维库表结构、表中列等对比) 2. 比对结果导出EXCEL 存放于 “工程根目录”/export/ 目录下 3. 比对的对象包括 表、表列、表索引、表分区差异、...
比对软件 比对软件
Needleman-Wunsch 算法(附java代码) Smith-Waterman 算法(附java代码)
Main为启动类,现在只是将比对差异的内容输出到控制台 搭建项目时,记得将lib文件夹下面的jar添加到classpath中
java实现的图片防篡改功能,采用图片hash生成唯一标识,再进行比对,判断图片是否被篡改过,可运行源码
java实现json报文比对(含测试数据,项目可直接下载运行测试)
C#图片对比,支持图片局布和整体图片比对,原图采样和目标图原图采样进行比对,特征匹配 在特征描述中,我们得到了512bit的二进制描述符,该描述符的列是高方差——>低方差的排列,而高方差表征了模糊信息,低方差...
twentytwenty - 图片对比插件
采用asp.net编写的人脸识别考勤系统,作为学习参考,功能实现两个图片的对比,打开图像之后的对话框中的语言与选项 时分别套用了这一个方法,实现了图片的对比分析
一个java web小demo,实现人脸匹配的小例子,具体使用情况可以参考我的博客
1. 两个 MYSQL 数据库对象结构比对工具 (比如:本地测试库、远程运维库表结构、表中列等对比) 2. 比对结果导出EXCEL 存放于 “工程根目录”/export/ 目录下 3. 比对的对象包括 表、表列、表索引、表分区差异、...
mysql 数据库结构对比工具 java 1.配置好两个数据库的账号密码数据库名称等信息 DbComparator db1 = new DbComparator("ip", null, "user", "password", "dbname", "47" ); ...
比较两个word内容将不一样的地方标记出来