視頻對(duì)象提取
與其說(shuō)是視頻對(duì)象提取西壮,不如說(shuō)是視頻顏色提取,因?yàn)槠浔举|(zhì)還是使用了OpenCV的HSV顏色物體檢測(cè)叫惊。
HSV介紹
HSV分別代表款青,色調(diào)(H:hue),飽和度(S:saturation)霍狰,亮度(V:value)抡草,由A. R. Smith在1978年創(chuàng)建的一種顏色空間, 也稱六角錐體模型(Hexcone Model);
色調(diào)(H:hue):用角度度量蔗坯,取值范圍為0°~360°康震,從紅色開始按逆時(shí)針?lè)较蛴?jì)算,紅色為0°宾濒,綠色為120°,藍(lán)色為240°腿短。它們的補(bǔ)色是:黃色為60°,青色為180°,品紅為300°橘忱;(OpenCV中H的取值范圍為0~180赴魁,8bit存儲(chǔ)時(shí));
飽和度(S:saturation):取值范圍為0~255钝诚,值越大颖御,顏色越飽和;
亮度(V:value):取值范圍為0(黑色)~255(白色)凝颇;
效果展示
image
實(shí)現(xiàn)思路
如上效果圖所示潘拱,我們要做的就是把視頻中的綠色的小豬佩奇識(shí)別出來(lái)即可,下面是的識(shí)別步驟:
- 使用PS取的小豬佩奇顏色的HSB值祈噪,相當(dāng)于OpenCV的HSV,不過(guò)PS的HSV(HSB)取值是:0360尚辑、01辑鲤、01,而OpenCV的HSV是:0180杠茬、0255月褥、0255,所以要對(duì)ps的hsv進(jìn)行處理瓢喉,H/2宁赤、SV*255;
- 使用OpenCV位“與運(yùn)算”提取HSV的顏色部分畫面栓票;
- 使用高斯模糊優(yōu)化圖片决左;
- 圖片展示;
PS中工具欄右側(cè)HSB顯示:
image
完整代碼
#coding=utf-8
#HSV轉(zhuǎn)換(顏色提茸咛啊)
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
while (1):
_, frame = cap.read()
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
#在PS里用取色器的HSV
psHSV = [112, 89, 52]
diff = 40 #上下浮動(dòng)值
#因?yàn)镻S的HSV(HSB)取值是:0~360佛猛、0~1、0~1坠狡,而OpenCV的HSV是:0~180继找、0~255、0~255逃沿,所以要對(duì)ps的hsv進(jìn)行處理婴渡,H/2、SV*255
lowerHSV = [(psHSV[0] - diff) / 2, (psHSV[1] - diff) * 255 / 100,
(psHSV[2] - diff) * 255 / 100]
upperHSV = [(psHSV[0] + diff) / 2, (psHSV[1] + diff) * 255 / 100,
(psHSV[2] + diff) * 255 / 100]
mask = cv2.inRange(hsv, np.array(lowerHSV), np.array(upperHSV))
#使用位“與運(yùn)算”提取顏色部分
res = cv2.bitwise_and(frame, frame, mask=mask)
#使用高斯模式優(yōu)化圖片
res = cv2.GaussianBlur(res, (5, 5), 1)
cv2.imshow('frame', frame)
# cv2.imshow('mask', mask)
cv2.imshow('res', res)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()