Python+opencv影象識別
阿新 • • 發佈:2019-06-19
影象識別
最近工作遇到了一個需要識別安全鍵盤並點選的需求,做自動化嘛,由於安全鍵盤的鍵位固定但是鍵值隨機,所以常規的方法不能正確獲取觸發點選,so,上網查了一下基本思路都是用機器識別。
- 載入opencv-python
pip install opencv-python
View Code會自動載入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是用來確定點選位置和點選事件的。