Java图片上查找图片算法

发表于:2014-12-11 09:48

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Jeby Sun    来源:51Testing软件测试网采编

  之前用按键精灵写过一些游戏辅助,里面有个函数叫FindPic,就上在屏幕范围查找给定的一张图片,返回查找到的坐标位置。
  现在,Java来实现这个函数类似的功能。
  算法描述:
  屏幕截图,得到图A,(查找的目标图片为图B);
  遍历图A的像素点,根据图B的尺寸,得到图B四个角映射到图A上的四个点;
  得到的四个点与图B的四个角像素点的值比较。如果四个点一样,执行步骤4;否则,回到步骤2继续;
  进一步对比,将映射范围内的全部点与图B全部的点比较。如果全部一样,则说明图片已找到;否则,回到步骤2继续;
  这里,像素之间的比较是通过BufferedImage对象获取每个像素的RGB值来比较的。如下,将BufferedImage转换为int二维数组:
1     /**
2      * 根据BufferedImage获取图片RGB数组
3      * @param bfImage
4      * @return
5      */
6     public static int[][] getImageGRB(BufferedImage bfImage) {
7         int width = bfImage.getWidth();
8         int height = bfImage.getHeight();
9         int[][] result = new int[height][width];
10         for (int h = 0; h < height; h++) {
11             for (int w = 0; w < width; w++) {
12                 //使用getRGB(w, h)获取该点的颜色值是ARGB,而在实际应用中使用的是RGB,所以需要将ARGB转化成RGB,即bufImg.getRGB(w, h) & 0xFFFFFF。
13                 result[h][w] = bfImage.getRGB(w, h) & 0xFFFFFF;
14             }
15         }
16         return result;
17     }
  比较两个像素点的RGB值是否相同,是通过异或操作比较的(据说比==效率更高),如果异或操作后得到的值为0,说明两个像素点的RGB一样,否则不一样。
  下面附上算法完整java代码:
1 package com.jebysun.test.imagefind;
2
3 import java.awt.AWTException;
4 import java.awt.Rectangle;
5 import java.awt.Robot;
6 import java.awt.Toolkit;
7 import java.awt.image.BufferedImage;
8 import java.io.File;
9 import java.io.IOException;
10
11 import javax.imageio.ImageIO;
12 /**
13  * 屏幕上查找指定图片
14  * @author Jeby Sun
15  * @date 2014-09-13
16  * @website http://www.jebysun.com
17  */
18 public class ImageFindDemo {
19
20     BufferedImage screenShotImage;    //屏幕截图
21     BufferedImage keyImage;           //查找目标图片
22
23     int scrShotImgWidth;              //屏幕截图宽度
24     int scrShotImgHeight;             //屏幕截图高度
25
26     int keyImgWidth;                  //查找目标图片宽度
27     int keyImgHeight;                 //查找目标图片高度
28
29     int[][] screenShotImageRGBData;   //屏幕截图RGB数据
30     int[][] keyImageRGBData;          //查找目标图片RGB数据
31
32     int[][][] findImgData;            //查找结果,目标图标位于屏幕截图上的坐标数据
33
34
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号