基于opencv的手勢識別框選(一)影像處理
- 程式
- 獲取影像
- 高斯處理
- 顏色閾值處理
程式
cap = cv2.VideoCapture(0)
while True:
ret , img = cap.read() # 打開攝像頭
img = cv2.GaussianBlur(img, (5, 5), 0) # 高斯濾波
ycrcb = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)
(y, cr, cb) = cv2.split(ycrcb)
cr1 = cv2.GaussianBlur(cr, (5, 5), 0) # 高斯濾波
_, skin1 = cv2.threshold(cr1, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) # OTSU影像二值化
blur = cv2.GaussianBlur(skin1, (15, 15), 0)
獲取影像
cap = cv2.VideoCapture(0)
videoCapture(0) 引數0表示呼叫筆記本內置攝像頭
videoCapture(“c:\tmp\test.avi”) 引數路徑表示呼叫存盤的視頻
此處VideoCapture()中引數是0,表示打開內置攝像頭,在填入引數后指向檔案路徑打開視頻
ret , img = cap.read()
cap.read第一位回傳的是布林值,即TURE和FALSE,確定的是采集到的每幀影像是否是正常的,img就是每幀采集到的圖片,也就是后續函式的輸入,
高斯處理
cv2.GaussianBlur(img, (5, 5), 0)
img為高斯處理的輸入,(5,5)為高斯矩陣,對原圖片進行卷積,0表示偏差為0
顏色閾值處理
opencv具有多種顏色閾值處理方式,包括YCrCb,HSV等等,這里采用YCrCb顏色空間法,其余以后再做介紹,
ycrcb = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)
將img本身的RGB像素資訊轉變為YCrCb資訊,
Y = 0.2990R + 0.5870G + 0.1140B
Cr = 0.5000R - 0.4187G - 0.0813B + 128
Cb = -0.1687R - 0.3313G + 0.5000B + 128
(y, cr, cb) = cv2.split(ycrcb)
這一步進行的是影像顏色通道的分離,將Y,Cr,Cb資訊分別儲存起來,方便后續呼叫,
cv2.threshold(cr1, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
接著進行的是OTSU二值化,這部分需要分為兩個方式看待
ret, dst = cv2.threshold(src, thresh, maxval, type) #固定閾值二值化
cv2.threshold(cr1, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) #基于直方圖的閾值處理
- src: 輸入圖,只能輸入單通道影像,通常來說為灰度圖
- dst: 輸出圖
- thresh: 閾值
- maxval: 當像素值超過了閾值(或者小于閾值,根據type來決定),所賦予的值
- type:二值化操作的型別,包含以下5種型別: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV
ps:后續補充圖片,11.11.21.21
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/214331.html
標籤:其他
上一篇:企業架設Voip 系統方案下載
