如何在一张图片中找到内容所在屏幕x y坐标值位置

cqhydz 2018-03-10 10:25:27
先将问题简单一点: 比如有一张图1.png (先假设它是全屏), 我先从这张图上取一块图2.png,想找到这张2.png在1.png上的屏幕x y坐标值。需要程序对两张图进行自动对比得到值,这方面有什么文章或开源库可以实现吗。谢谢大神指导


...全文
6433 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
大海张蒙 2020-04-30
  • 打赏
  • 举报
回复
cv2.matchtemplate函数进行图像匹配,这里给出了六种方法的对比,最后看max_loc或者min_loc就行 img=cv2.imread(filename,cv2.IMREAD_GRAYSCALE) template=cv2.imread(filename,cv2.IMREAD_GRAYSCALE) h,w=template.shape[:2] cv_show("img",img ) method=["cv2.TM_SQDIFF","cv2.TM_CCORR","cv2.TM_CCOEFF","cv2.TM_SQDIFF_NORMED","cv2.TM_CCORR_NORMED","cv2.TM_CCOEFF_NORMED"] for meth in method: car=img.copy() #car=img.copy() method=eval(meth) print(meth) res=cv2.matchTemplate(img2,template,method) min_var,max_val,min_loc,max_loc=cv2.minMaxLoc(res) if method in [cv2.TM_SQDIFF,cv2.TM_SQDIFF_NORMED]: top_left=min_loc else: top_left=max_loc bottom_right=(top_left[0]+w,top_left[1]+h) ret=cv2.rectangle(car,top_left,bottom_right,(255,0,0),2) plt.imshow(ret) plt.show()
youyiyang 2018-04-26
  • 打赏
  • 举报
回复
引用 17 楼 cqhydz 的回复:
引用 16 楼 youyiyang 的回复:
能分析的出是哪里有差异吗?比如小图周长一圈范围是不是有些差异,其它区域没有像素丢失呢?
没有,我想可能是分辨率的问题,现在问题在于如何快速找到图的位置与里面匹配得到一个相似的结果值。肯定有算法,我看tc提供这种功能一般找个图电脑上2s能匹配,应有公开的算法。还在找中。
图片剪裁后默认可能使用JPEG的85质量保存,这个会不会是差异的来源?
cqhydz 2018-03-29
  • 打赏
  • 举报
回复
引用 16 楼 youyiyang 的回复:
能分析的出是哪里有差异吗?比如小图周长一圈范围是不是有些差异,其它区域没有像素丢失呢?
没有,我想可能是分辨率的问题,现在问题在于如何快速找到图的位置与里面匹配得到一个相似的结果值。肯定有算法,我看tc提供这种功能一般找个图电脑上2s能匹配,应有公开的算法。还在找中。
youyiyang 2018-03-28
  • 打赏
  • 举报
回复
能分析的出是哪里有差异吗?比如小图周长一圈范围是不是有些差异,其它区域没有像素丢失呢?
cqhydz 2018-03-26
  • 打赏
  • 举报
回复
在整张图中找一块的位置确有点麻烦。。。
cqhydz 2018-03-25
  • 打赏
  • 举报
回复
引用 13 楼 youyiyang 的回复:
是指2.png和1.png的像素有一些差异吗?
大图是手机生成的图,小图是对比图,因为要在大图内找小图所在区域,有可能会有少量像素差异。
cqhydz 2018-03-23
  • 打赏
  • 举报
回复
引用 11 楼 youyiyang 的回复:
我个人有个想法仅仅供参考:楼主既然已经知道了x坐标了,而且2.png图片的width和height应该也是已经知道的,那么在1.png的x坐标和x+width坐标画2条竖线的话,这2条竖线区域里面一定包含2.png。然后你把2.png的所有像素点累加起来得到一个值,然后用一个循环语句在刚才那个竖条区域按照每个像素+1为步长,计算和png2相同面积的像素和是否和刚才的值是否一致?我没有专门搞过图像处理,不知道这个循环可以做到吗?如果可以做到的话,应该能找到几个相同值的小方块区域,然后你把2png的比如4分之1的区域像素和计算为一个值,用递归在刚才找到的几个小方块里面匹配是否一致,这样用排除法,再找到几个,然后你8分之1原来2.png的像素和,这样一直找到原来位置的那个小方块图片。这样做不知道能不能行?
你这个方法同我的现在用的方法差不多,但这个方法问题,是有时图的生成1.png象素会有一定差异,需要相似一种判断才行,具体还没找到。
youyiyang 2018-03-23
  • 打赏
  • 举报
回复
是指2.png和1.png的像素有一些差异吗?
youyiyang 2018-03-21
  • 打赏
  • 举报
回复
我个人有个想法仅仅供参考:楼主既然已经知道了x坐标了,而且2.png图片的width和height应该也是已经知道的,那么在1.png的x坐标和x+width坐标画2条竖线的话,这2条竖线区域里面一定包含2.png。然后你把2.png的所有像素点累加起来得到一个值,然后用一个循环语句在刚才那个竖条区域按照每个像素+1为步长,计算和png2相同面积的像素和是否和刚才的值是否一致?我没有专门搞过图像处理,不知道这个循环可以做到吗?如果可以做到的话,应该能找到几个相同值的小方块区域,然后你把2png的比如4分之1的区域像素和计算为一个值,用递归在刚才找到的几个小方块里面匹配是否一致,这样用排除法,再找到几个,然后你8分之1原来2.png的像素和,这样一直找到原来位置的那个小方块图片。这样做不知道能不能行?
cqhydz 2018-03-21
  • 打赏
  • 举报
回复
引用 9 楼 Prohackers 的回复:
只能大体知道那块区域,具体到某个像素点,这个不可能,因为临近和非临近的像素点也可能是相同的。
只要大概就行了70%知道就行了,因为手机我是有截图的,所以其实横坐标我是有的,现在只要是找到纵坐标匹配,现在我用最笨方法的是硬扫每行像素,不知道算法怎么处理优化。
MadFrogs 2018-03-19
  • 打赏
  • 举报
回复
只能大体知道那块区域,具体到某个像素点,这个不可能,因为临近和非临近的像素点也可能是相同的。
cqhydz 2018-03-18
  • 打赏
  • 举报
回复
引用 3 楼 lllx9464 的回复:
这是图像识别?
有没有具体点的图像识别方法啊
cqhydz 2018-03-15
  • 打赏
  • 举报
回复
引用 2 楼 xj396282771 的回复:
能不能改下功能嘛,通过点击屏幕获取当前点击位置的x y坐标值,如果可以的话,在你的Activity或者Fragment里面重写onTouchEvent方法,自定义监听就可以了
你将内容理解错了,我是要进行图片匹配。
cqhydz 2018-03-15
  • 打赏
  • 举报
回复
引用 3 楼 lllx9464 的回复:
这是图像识别?
是有是图像识别,不知你用过 Total Control脚本 同里面的这个功能很类似q
xhcoding 2018-03-13
  • 打赏
  • 举报
回复
试试图像匹配算法中的灰度匹配或者其他匹配算法,可以使用opencv库
十二月的消亡 2018-03-13
  • 打赏
  • 举报
回复
OpenCV吧。。。
十二月的消亡 2018-03-13
  • 打赏
  • 举报
回复
这是图像识别?
Jing丶無雙 2018-03-13
  • 打赏
  • 举报
回复
能不能改下功能嘛,通过点击屏幕获取当前点击位置的x y坐标值,如果可以的话,在你的Activity或者Fragment里面重写onTouchEvent方法,自定义监听就可以了
cqhydz 2018-03-10
  • 打赏
  • 举报
回复
还在想方法中。。。。

80,352

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧