使用OpenCV提取不同顏色物體


在我們的程序中,我們要提取的是一個藍色的物體。下面就是就是我們要做的幾步:

• 將圖像轉換到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的投射。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM