opencv庫的使用
cv2.imread(filepath,flags):讀入一張圖像
- filepath:要讀入圖片的完整路徑
- flags:讀入圖片的標志
- cv2.IMREAD_COLOR:默認參數,值為1,讀入一副彩色圖片,忽略alpha通道
- cv2.IMREAD_GRAYSCALE:值為0,讀入灰度圖片,
- cv2.IMREAD_UNCHANGED:值為-1,讀入完整圖片,包括alpha通道
cv2.imshow(wname,img):顯示圖像
- wname:顯示圖像窗口的名字
- img:要顯示的圖像,窗口大小自動調整為圖片大小
cv2.imwrite(file,img,num):保存一張圖像
- file:要保存的文件名
- img:保存的圖像
- num:壓縮的級別,默認為3
cv2.cvtColor(img,code) :圖像顏色空間轉換
- img:要轉換的圖片
- code:要轉換顏色的數值
- cv2.COLOR_RGB2GRAY:彩色圖像轉化為灰度圖像
- cv2.COLOR_GRAY2RGB:灰度圖像轉化為彩色圖像
- # cv2.COLOR_X2Y,其中X,Y = RGB, BGR, GRAY, HSV, YCrCb, XYZ, Lab, Luv, HLS
cv2.matchTemplate(img,templ,method):模板匹配
- img:待搜索圖像
- templ:搜索模板,需和原圖一樣的數據類型且尺寸不能大於源圖像
- method:指定的匹配方法
- CV_TM_SQDIFF----平方差匹配法(最好匹配0)
- CV_TM_SQDIFF_NORMED----歸一化平方差匹配法(最好匹配0)
- CV_TM_CCORR----相關匹配法(最壞匹配0)
- CV_TM_CCORR_NORMED----歸一化相關匹配法(最壞匹配0)
- CV_TM_CCOEFF----系數匹配法(最好匹配1)
- CV_TM_CCOEFF_NORMED----歸一化相關系數匹配法(最好匹配1)
計算滑動距離:
def get_distance(bg_img_path,slider_img_path): """獲取滑塊移動距離""" #背景圖片處理 bg_img = cv.imread(bg_img_path, 0) #讀入灰度圖片 bg_img = cv.GaussianBlur(bg_img, (3, 3), 0) #高斯模糊去噪 bg_img = cv.Canny(bg_img, 50, 150) #Canny算法進行邊緣檢測 #滑塊做同樣處理 slider_img = cv.imread(slider_img_path, 0) slider_img = cv.GaussianBlur(slider_img, (3, 3), 0) slider_img = cv.Canny(slider_img, 50, 150) # 尋找最佳匹配 res = cv.matchTemplate(bg_img, slider_img, cv.TM_CCOEFF_NORMED) # 最小值,最大值,並得到最小值, 最大值的索引 min_val, max_val, min_loc, max_loc = cv.minMaxLoc(res) #例如:(-0.05772797390818596, 0.30968162417411804, (0, 0), (196, 1)) top_left = max_loc[0] # 橫坐標 # 展示圈出來的區域 # w, h = image.shape[::-1] # 寬高,例如(320, 160) # cv.rectangle(template, (x, y), (x + w, y + h), (7, 249, 151), 2) # cv.imshow('Show', bg_img) # cv.waitKey(0) # cv.destroyAllWindows() return top_left