Python+opencv图像识别
图像识别
最近工作遇到了一个需要识别安全键盘并点击的需求,做自动化嘛,由于安全键盘的键位固定但是键值随机,所以常规的方法不能正确获取触发点击,so,上网查了一下基本思路都是用机器识别。
- 加载opencv-python
pip install opencv-python
会自动加载opencv-python,numpy和cv2
- 当文件中导入cv2,直接上代码:
def get_keynumber_location(self): ''' 获取字母对应位置 :return:返回template在image中的的bound参数 ''' keynum = pic_path + "\keynum.png" #键盘图片 image = cv2.imread(keynum) key = cur_path + "\keyboard\%s.png" % 1 #数字键图片 template = cv2.imread(key) h,w = template.shape[:2] #字母图片尺寸 result = cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED) #图片对比 min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result) #对比结果最大值最小值以及位置 br = (max_loc[0] + w,max_loc[1] + h) # cv2.rectangle(image,max_loc,br,[0,255,0],2) # cv2.imshow("pipei",image) # cv2.waitKey(0) # cv2.destroyAllWindows() return max_loc, br def click_position(self): ''' 确定点击位置 :param password: 口令密码 :return:返回点击位置position ''' a,b = self.get_keynumber_location() #template在image中的的bound参数 x = a[0] + b[0] y = a[1] + b[1] position = (x / 2,y / 2) self.driver.tap([position]) # 点击 return position
基本就是用cv2.imread(path)读取图片,用cv2.matchTemplate(大图,小图,策略)函数进行比较,返回的是一个结果集,用cv2.minMaxLoc(result)函数获得最小值、最大值和相应位置。注释部分是验证识别区域是否正确,click_position是用来确定点击位置和点击事件的。