图片对比的另一种方式是通过将图片每一个像素的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;
}
}
分享到:
相关推荐
Java结合OpenCV库,能够有效地实现复杂的图像操作,比如图片对比和标记差异部分。本篇将深入探讨如何利用Java和OpenCV进行图片对比,并且支持中文路径。 首先,OpenCV是一个强大的开源计算机视觉库,它提供了丰富的...
在Java中进行图像识别,...总的来说,Java图像识别并判断两图相似性涉及到多个层次的技术,从简单的像素比对到复杂的深度学习模型。开发者可以根据具体需求和环境选择合适的方法,并利用现有的开源工具简化实现过程。
1-2 Java安装 16 1-3 Eclipse安装 18 1-4 GUI设计工具WindowBuilder 18 1-5 在Eclipse开发第一个Java程式 23 1-6 在Eclipse开发第一个Java视窗程式-显示影像 26 1-7 在Eclipse开发视窗程式-slider控制元件 34 1-8 在...
在计算机视觉领域,图像相似度对比是至关重要的任务,OpenCV作为一个强大的库,提供了多种方法来衡量和比较图像之间的相似性。以下将详细介绍几种主要的OpenCV图像相似度对比方法: 1. 直方图方法: 直方图是表示...
渲染文件并逐像素比较。 与Maven结合使用 只需将其作为依赖项即可。 请检查可用的最新版本: < groupId>de.redsix < artifactId>pdfcompare < version>...</ version> <!-- see current version in the ...
【Java版QQ找茬测试版】是一个利用编程技术实现的自动化辅助工具,旨在帮助玩家在游戏中自动识别并找出图片之间的差异。这款应用的核心功能是自动找茬,减轻了玩家手动寻找不同之处的压力,尤其是在时间限制下增加了...
当用户上传一张图片,谷歌会使用感知哈希算法计算其指纹,然后与数据库中其他图像的指纹进行比对,找出相似或相同的图片。 8. **指纹验证**:在版权保护方面,感知哈希也被用来验证图像的原始性和完整性。通过比较...
2. **图像处理库**:为了处理和分析图片,开发者可能使用了如OpenCV、Java Advanced Imaging (JAI) 或者JavaFX等图像处理库。这些库提供了丰富的API,可以帮助进行图像读取、对比、像素操作等任务。 3. **图像比对...
自己做的图片jar,里面涉及了直方图,汉明距离,直接算像素比等等算法把,不能说特别准确,在你模版给的准的情况下,应该还是可以的,总共五种算法,都试试每种算出来的东西是不一样的
10. **文件大小比对**:为了对比压缩前后的文件大小,可以使用`java.io.File`类的`length()`方法获取文件的字节数,然后转换成可读的格式如KB、MB展示给用户。 综上所述,Android图片压缩涉及到图像处理的基本概念...
4. **像素比对**:将捕获的图像与基准图像进行逐像素比对。这可以通过计算两图像的像素差异来实现,比如计算像素颜色的曼哈顿距离或欧几里得距离。 5. **结果分析**:如果有任何像素不匹配,标记为测试失败,并定位...
总结,imagecompare作为一款基于Java的图像比较工具,不仅提供了便捷的图像比对功能,还展示了Java在图像处理领域的强大能力。无论是开发人员还是普通用户,都能从中受益。通过对源代码的学习,开发者可以进一步掌握...
5. 色彩篡改:调整图像的色彩、亮度和对比度等属性。 6. 拼接:将两个或多个图像的部分合并为一个新图像。 二、篡改检测技术基础 图像篡改检测主要依赖于图像分析和模式识别,通过对图像的特征提取、比对和分析,...
在实际使用中,大漠插件通常会配合编程语言(如Python、Java等)进行二次开发,通过编写脚本来实现自动化任务。开发者可以根据需求编写脚本,调用大漠插件的API,完成诸如点击、拖拽、输入文字等复杂的操作。 大漠3...
这可能涉及到图像的像素级比对、模糊匹配、差异检测等技术,确保玩家能在两幅看似相同的图片中找出细微的差别。 3. 数值设定:描述中提到的“有关数设置”可能指的是游戏难度的调整,包括但不限于错误次数限制、...
2. **扭曲和干扰**:为了增加机器识别的难度,验证码图像通常会被扭曲、添加噪声或者部分像素化。这些步骤可以使用图像处理算法实现。 3. **存储验证码值**:生成的验证码值需要临时存储在服务器端,以便后续用户...
对于编程初学者,通过阅读源码可以了解如何利用编程语言(可能是Python、C#、Java等)实现图像处理功能,包括图像读取、图像对比、差异区域标识等步骤。此外,还能学习到如何与游戏界面进行交互,比如自动化点击或...
对比易语言,Java版本可能提供了更高级的抽象和优化,但实现原理基本一致。 总的来说,QQ空间滑块登录协yi的实现是一个综合性的项目,涵盖了图像处理、算法设计、网络编程等多个领域,对提升开发者的技术能力和解决...
在开发环境上,系统使用了Eclipse集成开发环境,利用Java语言进行编程开发,确保了系统的跨平台性和良好的兼容性。支持的常见浏览器包括IE浏览器、Chrome浏览器、360浏览器等。在硬件方面,系统要求摄像头像素达到...