uiautomator2
uiautomator2 copied to clipboard
图像匹配错误
uiautomator2的版本号:2.11.1
使用device.image.match时匹配错误
模版图像是:
截图:
匹配结果:{'similarity': 0.9961444735527039, 'point': [319, 673]}
直接使用findit模块测试也是这么高匹配度,估计是findit模块不给力,是否有更好的图像匹配算法呢
你这个关机按钮被识别到了这里
因为转化成了灰度图去对比,所以颜色信息丢失了。
我试着用opencv去做图像匹配,也是被识别到这里,看来目前比较无解
https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_colorspaces/py_colorspaces.html
可以直接用HSV的H通道来模板匹配。 H代表颜色通道
image = cv2.imread("image.png")
template = cv2.imread("tempalte.png")
himage = cv2.split(cv2.cvtColor(image, cv2.COLOR_BGR2HSV))[0]
htempl = cv2.split(cv2.cvtColor(template, cv2.COLOR_BGR2HSV))[0]
sim = match_template(himage, htempl) # 具体代码我不详细的写了
试了下,还可以
十分感谢
十分感谢
请问你解决了 吗?我还是有些不太明白,想和你交流交流,我的微信kimihasukida
https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_colorspaces/py_colorspaces.html
可以直接用HSV的H通道来模板匹配。 H代表颜色通道
image = cv2.imread("image.png") template = cv2.imread("tempalte.png") himage = cv2.split(cv2.cvtColor(image, cv2.COLOR_BGR2HSV))[0] htempl = cv2.split(cv2.cvtColor(template, cv2.COLOR_BGR2HSV))[0] sim = match_template(himage, htempl) # 具体代码我不详细的写了
试了下,还可以
请问通过修改源码的哪一部分可以使用H通道,看起来应该是这一段代码
https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_colorspaces/py_colorspaces.html 可以直接用HSV的H通道来模板匹配。 H代表颜色通道
image = cv2.imread("image.png") template = cv2.imread("tempalte.png") himage = cv2.split(cv2.cvtColor(image, cv2.COLOR_BGR2HSV))[0] htempl = cv2.split(cv2.cvtColor(template, cv2.COLOR_BGR2HSV))[0] sim = match_template(himage, htempl) # 具体代码我不详细的写了
试了下,还可以
请问通过修改源码的哪一部分可以使用H通道,看起来应该是这一段代码
上面的代码我试了也不太行,虽然对于不匹配的截图similarity是低了,但是对于匹配的截图similarity也不高。。
目前是我参考这个stackoverflow,把匹配算法更换为cv2.TM_CCOEFF_NORMED
大致代码:
from findit import FindIt
# 更换匹配算法
fi = FindIt(
engine_template_cv_method_name='cv2.TM_CCOEFF_NORMED'
)
# 加载关机按钮
fi.load_template(
pic_name='template',
pic_path='close.jpg',
)
# 匹配有关机按钮的截图
print(fi.find(
target_pic_name='screenshot',
target_pic_path='match.jpg',
))
>>>{'target_name': 'screenshot', 'target_path': 'match.jpg', 'data': {'template': {'TemplateEngine': {'target_point': [910, 557], 'target_sim': 0.9564827084541321, 'ok': True}, 'FeatureEngine': {'target_point': (-1, -1), 'ok': False}}}}
# 匹配没有关机按钮的截图
print(fi.find(
target_pic_name='screenshot',
target_pic_path='unmatch.jpg',
))
>>>{'target_name': 'screenshot', 'target_path': 'unmatch.jpg', 'data': {'template': {'TemplateEngine': {'target_point': [381, 2039], 'target_sim': 0.7069997191429138, 'ok': True}, 'FeatureEngine': {'target_point': (-1, -1), 'ok': False}}}}
import cv2
import aircv as ac
def match(IMSRC, IMOBJ):#imgsrc=原始图像,imgobj=待查找的图片
# 匹配图标位置
imsrc = cv2.imread(IMSRC)
imobj = cv2.imread(IMOBJ)
pos = ac.find_all_template(imsrc, imobj, 0.8)
if pos == None:
print("最终没能匹配到:" + imsrc)
return None
else:
return [p['result'] for p in pos] #pos ==>[{'result': (975.0, 542.0), 'rectangle': ((939, 515), (939, 569), (1011, 515), (1011, 569)), 'confidence': 1.0}, {'result': (450.0, 542.0)....
好用