python+opencv判斷開關或按鈕的狀態
前言:
前期我們說過移動端定位問題(使用adb 坐標,使用uiautomator2,opencv獲取坐標的方法)今天我們講一下關于判斷一個開關或者按鍵的狀態,做個移動端的都會多少遇到開關或者按鍵無法判斷狀態的情況,
opencv真的是一個非常強大的模塊,大家可以多學一下,大佬請忽略
1 . 第一步安裝opencv,大家自行安裝
2. 第二步匯入opencv
improt cv2
3.學習過opencv的同學應該知道其中有一個獲取像素值的方法,今天我們就用到這個方法來判斷某個地點的狀態
4.既然使用像素值來判斷某個點像素的狀態,那么我們就應該提前知道該點的坐標,x,y和像素值,我們寫一個人機互動來獲取 x,y和像素值,
5.opencv的滑鼠互動操作主要通過兩個函式實作:
- 第一個是cv2.setMouseCallback(windowName, onm ouse [param]),第一個引數windowName是視窗名
- 第二個是cv2.setMouseCallback()的第二個引數,稱為滑鼠回呼函式onmouse(event, x, y, flags, param)
cv2.setMouseCallback(windowName, onm ouse [param])
引數說明:
windowName:必需,opencv具體操作哪個視窗以視窗名作為識別標識,不要使用中文命名,會出亂碼,
onm ouse:必需,滑鼠回呼函式,滑鼠回呼函式的定義是onMouse(event, x, y, flags, param),滑鼠操作就在這個函式中
param:可選,請注意到onMouse里面也有一個param引數,它與是setMouseCallback里的param是同一個,更直白一點說,這個param是onMouse和setMouseCallback之間的引數通信介面,
滑鼠回呼函式:onMouse(event, x, y, flags, param)
這個引數串列不要改變它,除了param外其他都是由回呼函式自動獲取值,
引數說明:
event:由回呼函式根據滑鼠對影像的操作自動獲得,內容包含左鍵點擊,左鍵彈起,右鍵點擊…等等等非常多的操作,
x,y:由回呼函式自動獲得,記錄了滑鼠當前位置的坐標,坐標以影像左上角為原點(0, 0),x方向向右為正,y方向向下為正,
flags:記錄了一些專門的操作
param:從setMouseCallback()里傳遞過來的引數,該引數在setMouseCallback()處是可選引數,所以可以不設定,
import cv2
img = "C:\\Users\\Desktop\\tools\\79.png"
def onmouse(event, x, y, flags, param): # 標準滑鼠互動函式
if event == cv2.EVENT_MOUSEMOVE: # 當滑鼠移動時
imgs = cv2.imread(img, 0)
print(x, y, imgs[y, x]) # 顯示滑鼠所在像素坐標和數值,注意像素表示方法和坐標位置的不同
def win_name(img):
cv2.namedWindow("img", 0) # 構建視窗
cv2.resizeWindow("img", 640, 480)
cv2.setMouseCallback("img", onm ouse) # 回呼系結視窗
imgs = cv2.imread(img, 0)
while True: # 無限回圈
cv2.imshow("img", imgs) # 顯示影像
if cv2.waitKey() == ord('q'):
break # 按下‘q'鍵,退出
cv2.destroyAllWindows() # 關閉視窗
if __name__ == '__main__':
win_name(img = "C:\\Users\\Desktop\\tools\\9.png")
我們運行此段代碼,會在電腦上打開一個視窗顯示我們要使用的圖片,通過移動滑鼠我們即可獲取某個點的坐標和像素值了

列印結果如下:
我們得到某點的坐標和像素值,那么我們就可以根據像素值來判斷這個按鈕或者其他的狀態了
在opencv中0是黑色/無顏色,255表示白色,計算機視覺中圖片也是一堆數字組成的,我們就是利用這些數字來做判斷,
import cv2
def check_button(path, picture, bounds,pixel_value):
"""
用來檢查某個選項
:param path: image 待檢查界面
:param picture: image 待檢查界面
:param bounds: bounds 需要檢查的坐標
:param pixel_value 需要檢查的像素值
:return: str 回傳檢查結果 OPEN 或 CLOSE
"""
result = "error"
try:
image = cv2.imread(path + '/' + picture) # 讀取圖片
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 轉為灰度圖
if image[int(bounds[1]), int(bounds[0])] > pixel_value: # img[y,x]與坐標[x,y]相反,注意
print(bounds[1], bounds[0], "open")
result = "opened"
else:
print(bounds[1], bounds[0], "close")
result = "closed"
except Exception as e:
print(e)
finally:
return result
if __name__ == '__main__':
check_button(path="C:\\Users\\zhenhua.zhang1.o\\Desktop\\tools", picture="79.png", bounds=[89, 45],pixel_value =80)
運行結果如下:

同學們都看到這里了,給關注白,后續更新不迷路!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/300315.html
標籤:其他
上一篇:大量資料匯出Excel方案
