`
chenxu_8456
  • 浏览: 41913 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Java实现图片比对(2)-逐像素对比

 
阅读更多
图片对比的另一种方式是通过将图片每一个像素的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库,能够有效地实现复杂的图像操作,比如图片对比和标记差异部分。本篇将深入探讨如何利用Java和OpenCV进行图片对比,并且支持中文路径。 首先,OpenCV是一个强大的开源计算机视觉库,它提供了丰富的...

    java图像识别(判断两个图是否相似)

    在Java中进行图像识别,...总的来说,Java图像识别并判断两图相似性涉及到多个层次的技术,从简单的像素比对到复杂的深度学习模型。开发者可以根据具体需求和环境选择合适的方法,并利用现有的开源工具简化实现过程。

    基于opencv3.1库的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 在...

    9. OpenCV进行图像相似度对比的几种办法 - zchang81的博客 - CSDN博客1

    在计算机视觉领域,图像相似度对比是至关重要的任务,OpenCV作为一个强大的库,提供了多种方法来衡量和比较图像之间的相似性。以下将详细介绍几种主要的OpenCV图像相似度对比方法: 1. 直方图方法: 直方图是表示...

    pdfcompare:一个比较两个PDF文件的简单Java库

    渲染文件并逐像素比较。 与Maven结合使用 只需将其作为依赖项即可。 请检查可用的最新版本: &lt; groupId&gt;de.redsix &lt; artifactId&gt;pdfcompare &lt; version&gt;...&lt;/ version&gt; &lt;!-- see current version in the ...

    java版QQ找茬测试版

    【Java版QQ找茬测试版】是一个利用编程技术实现的自动化辅助工具,旨在帮助玩家在游戏中自动识别并找出图片之间的差异。这款应用的核心功能是自动找茬,减轻了玩家手动寻找不同之处的压力,尤其是在时间限制下增加了...

    图片识别-感知哈希算法

    当用户上传一张图片,谷歌会使用感知哈希算法计算其指纹,然后与数据库中其他图像的指纹进行比对,找出相似或相同的图片。 8. **指纹验证**:在版权保护方面,感知哈希也被用来验证图像的原始性和完整性。通过比较...

    java 版qq美女找茬助手

    2. **图像处理库**:为了处理和分析图片,开发者可能使用了如OpenCV、Java Advanced Imaging (JAI) 或者JavaFX等图像处理库。这些库提供了丰富的API,可以帮助进行图像读取、对比、像素操作等任务。 3. **图像比对...

    图片对比jar包

    自己做的图片jar,里面涉及了直方图,汉明距离,直接算像素比等等算法把,不能说特别准确,在你模版给的准的情况下,应该还是可以的,总共五种算法,都试试每种算出来的东西是不一样的

    Android图片压缩示例

    10. **文件大小比对**:为了对比压缩前后的文件大小,可以使用`java.io.File`类的`length()`方法获取文件的字节数,然后转换成可读的格式如KB、MB展示给用户。 综上所述,Android图片压缩涉及到图像处理的基本概念...

    PixelTesting:使用 2D 像素绘图进行测试

    4. **像素比对**:将捕获的图像与基准图像进行逐像素比对。这可以通过计算两图像的像素差异来实现,比如计算像素颜色的曼哈顿距离或欧几里得距离。 5. **结果分析**:如果有任何像素不匹配,标记为测试失败,并定位...

    imagecompare:简单的图像比较工具

    总结,imagecompare作为一款基于Java的图像比较工具,不仅提供了便捷的图像比对功能,还展示了Java在图像处理领域的强大能力。无论是开发人员还是普通用户,都能从中受益。通过对源代码的学习,开发者可以进一步掌握...

    图像篡改检测.zip

    5. 色彩篡改:调整图像的色彩、亮度和对比度等属性。 6. 拼接:将两个或多个图像的部分合并为一个新图像。 二、篡改检测技术基础 图像篡改检测主要依赖于图像分析和模式识别,通过对图像的特征提取、比对和分析,...

    大漠插件 取图取色 文字判断

    在实际使用中,大漠插件通常会配合编程语言(如Python、Java等)进行二次开发,通过编写脚本来实现自动化任务。开发者可以根据需求编写脚本,调用大漠插件的API,完成诸如点击、拖拽、输入文字等复杂的操作。 大漠3...

    很完整的找茬游戏

    这可能涉及到图像的像素级比对、模糊匹配、差异检测等技术,确保玩家能在两幅看似相同的图片中找出细微的差别。 3. 数值设定:描述中提到的“有关数设置”可能指的是游戏难度的调整,包括但不限于错误次数限制、...

    验证码validate

    2. **扭曲和干扰**:为了增加机器识别的难度,验证码图像通常会被扭曲、添加噪声或者部分像素化。这些步骤可以使用图像处理算法实现。 3. **存储验证码值**:生成的验证码值需要临时存储在服务器端,以便后续用户...

    QQ找茬辅助工具(程序+源码)

    对于编程初学者,通过阅读源码可以了解如何利用编程语言(可能是Python、C#、Java等)实现图像处理功能,包括图像读取、图像对比、差异区域标识等步骤。此外,还能学习到如何与游戏界面进行交互,比如自动化点击或...

    QQ空间滑块登录协yi(纯算法)-易语言

    对比易语言,Java版本可能提供了更高级的抽象和优化,但实现原理基本一致。 总的来说,QQ空间滑块登录协yi的实现是一个综合性的项目,涵盖了图像处理、算法设计、网络编程等多个领域,对提升开发者的技术能力和解决...

    基于百度云服务的人脸识别查寝系统设计与开发.pdf

    在开发环境上,系统使用了Eclipse集成开发环境,利用Java语言进行编程开发,确保了系统的跨平台性和良好的兼容性。支持的常见浏览器包括IE浏览器、Chrome浏览器、360浏览器等。在硬件方面,系统要求摄像头像素达到...

Global site tag (gtag.js) - Google Analytics