基本方法:
test() — 用于对结果进行调试,显示出匹配到的位置
click() — 简单的点击操作。
check_and_click() — 首先对匹配到的区域进行相关性计算。设置阈值就是在这时起效,相关性在阈值范围内时,将进行点击。
def test(self): #调试
img = cv.rectangle(self.full_screen,(int(self.point_x),int(self.point_y)),
(int(self.point_x)+4,int(self.point_y)+4),(0,0,255),thickness=8)
cv.imshow('win',img)
cv.imwrite('test.png',img)
cv.waitKey(0)
**这个调试,结果是输出一张标有点击位置的图片(csdn上传图片失败)
实现代码:
Click_pic(‘weixin.png’,udid=‘W4ONOZNJU859MVN7’).test()
def click(self): #不做任何判断,直接根据匹配到的图像进行点击。最简单的流程
print('【点击坐标】', self.point_x, self.point_y)
if self.udid == None:
os.system('adb shell input tap %s %s' % (self.point_x, self.point_y))
else:
os.system('adb -s %s shell input tap %s %s'% (self.udid,self.point_x,self.point_y))
这是最简单的操作,没有任何等待和判断。
代码实现:
Click_pic(‘weixin.png’,udid=‘W4ONOZNJU859MVN7’).click()
def check_and_click(self,click=True): #获取根据匹配小图,找到的结果位置图片,然后对比匹配小图与结果图片,比较后进行点击或返回False
#opencv 11
gray_match_pic = cv.cvtColor(self.match_pic,cv.COLOR_BGR2GRAY)
hist1 = cv.calcHist([self.cut_match], [0], mask=None, histSize=[256], ranges=[0, 180])
hist2 = cv.calcHist([gray_match_pic], [0], mask=None, histSize=[256], ranges=[0, 180])
# hist2 = cv.calcHist([cv.imread('.\\lli.png')], [0], mask=None, histSize=[256], ranges=[0, 180])
match_relation = cv.compareHist(hist1, hist2, cv.HISTCMP_CORREL)
print('【相关性】',match_relation) #0.9923635306251178
if self.Related[0]<=match_relation<=self.Related[1]:
result = True
else:
print('没有找到匹配的区域')
return False
if result and click:
self.click()
return result
这里对匹配结果进行确定,增加操作的正确性。
代码实现:
Click_pic(‘send.png’).check_and_click()
【代码将不断更新,也欢迎各位大神指点优化一下】