openCV學習筆記6—顏色轉換,物體跟蹤,獲取閾值
技術標籤:OpenCV學習筆記opencvpython計算機視覺
openCV中的顏色轉換有100多種,但我們經常用到的只有兩種。BGR↔Gray 和 BGR↔HSV。
用到的函式cv2.cvtColor(input_image,flag)。flag就是要轉化的型別。
接下來重點介紹物體的跟蹤。在此之前需要知道幾點。
掩膜
含義:掩模是由0和1組成的一個二進位制影象。當在某一功能中應用掩模時,1值區域被處理,被遮蔽的0值區域不被包括在計算中。通過指定的資料值、資料範圍、有限或無限值、感興趣區和註釋檔案來定義影象掩模,也可以應用上述選項的任意組合作為輸入來建立掩模。
示例:下圖中的mask就是掩膜。
HSV
H(Hue):色調,取值範圍是 [0,179] ,它用來限制某一個顏色的彩色光譜範圍;
S(Saturation):飽和度,取值範圍是 [0,255] ,它用來限制顏色的深度,值越大顏色越深;
V(Value):色值,取值範圍是 [0,255] ,它用來限制畫素的亮度,值越大畫素越亮。
cv2.bitwise_and()
對二進位制資料進行“與”操作,即對影象(灰度影象或彩色影象均可)每個畫素值進行二進位制“與”操作,1&1=1,1&0=0,0&1=0,0&0=0。示例參照上圖。
uint8
uint8是專門用於儲存各種影象的(包括RGB,灰度影象等),範圍是從0–255.
追蹤藍色物體原始碼
import cv2
import numpy as np
cap=cv2.VideoCapture(0)
while (1):
#獲取每一幀的圖片
ret,frame=cap.read()
#轉化為HSV
hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
#設定藍色的閾值
lower_blue=np.array([110,50,50])
upper_blue= np.array([130,255,255])
#根據閾值構建掩膜
mask=cv2.inRange(hsv,lower_blue,upper_blue)
#對原影象和掩膜進行位運算
#src1:第一個影象(合併的第一個物件)src2:第二個影象(合併的第二個物件)mask:理解為要合併的規則。
res=cv2.bitwise_and(frame,frame,mask=mask)
#顯示影象
cv2.imshow('frame',frame)
cv2.imshow('mask',mask)
cv2.imshow('res',res)
k=cv2.waitKey(5)&0xFF
#按esc鍵退出
if k==27:
break
cv2.destroyAllWindows()
獲取閾值
追蹤物體的關鍵就是獲取相關的閾值。接下來給出將RGB轉化為HSV的方法。
import cv2
import numpy as np
# 這裡的三層括號應該分別對應於 cvArray,cvMat,IplImage
white=np.uint8([[[255,255,255]]])
white_hsv=cv2.cvtColor(white,cv2.COLOR_BGR2HSV)
print(white_hsv)
可以分別用 [H-100,100,100] 和 [H+100,255,255] 做上下閾值。
下邊是一些常見顏色的H值範圍。
-30<=h<30, 紅色
30<=h<90, 黃色
90<=h<150,綠色
150<=h<210,青色
210<=h<270,藍色
270<=h<330,品紅色