在我們的程序中,我們要提取的是一個藍色的物體。下面就是就是我們要做的幾步:
• 將圖像轉換到HSV 空間
• 設置HSV 閾值到藍色范圍。
• 獲取藍色物體。
原圖片如下:
我們需要從其中提取出藍色的部分並顯示出來。我們需要使用這樣幾個函數:
cv2.cvtColor():將載入的RGB模式圖片轉換為HSV模式,這是因為HSV模式下能夠更加容易地表示一種特定地顏色。
cv2.inRange(src, lowerb, upperb, dst=None):將圖片二值化。對於圖片中的每一個像素點,將其值與lowerb和upperb進行比較,如果在這個范圍內則將其設置為255,反之修改為0。使用這個函數我們可以得到ROI的掩模。
cv2.bitwise_and():按位與運算。我們使用圖片ROI的掩模與原圖進行按位與運算后,可將除ROI外的其他區域像素點的值變為0,而ROI區域的值則保持不變(按照二進制進行與運算時,有1&0=0,0&0=0,0&1=0,1&1=1;掩模上ROI區域像素點的值均被修改為255,即11111111,與原圖片與運算后,原圖片上對應ROI區域的像素點值保持不變;掩模上ROI區域以外的值被修改為0,與原圖片進行與運算后,原圖上對應區域的像素點值被修改為0)。
cv2.imshow():顯示圖片。
程序代碼如下:
import cv2 import numpy as np lower_blue=np.array([110,50,50]) upper_blue=np.array([130,255,255]) img1=cv2.imread("Blue_Green_Red.jpg") xsize,ysize,channel=img1.shape #調整圖片大小 img1=cv2.resize(img1,(ysize//2,xsize//2)) frame=cv2.cvtColor(img1,cv2.COLOR_BGR2HSV) mask_blue=cv2.inRange(frame,lower_blue,upper_blue) res_blue=cv2.bitwise_and(frame,frame,mask=mask_blue) res_blue=cv2.cvtColor(res_blue,cv2.COLOR_HSV2BGR) cv2.imshow("mask_blue",mask_blue) cv2.imshow("res_blue",res_blue) cv2.waitKey(0) cv2.destroyAllWindows()
運行結果如下:
可以看到,藍色區域被很好的提取出來了。這種方法在選擇非矩形ROI時非常有用,常常用於logo的投射。