从摄像机捕获
import cv2 as cv
import numpy as np
cap = cv.VideoCapture(0)
while(1):
_, frame = cap.read()
hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
lower_blue = np.array([106, 43, 46])
upper_blue = np.array([130, 255, 255])
mask_B = cv.inRange(hsv, lower_blue, upper_blue)
lower_green = np.array([35, 43, 46])
upper_green = np.array([77, 255, 255])
mask_G = cv.inRange(hsv, lower_green, upper_green)
lower_red1 = np.array([0, 43, 46])
upper_red1 = np.array([10, 255, 255])
mask_R1 = cv.inRange(hsv, lower_red1, upper_red1)
lower_red2 = np.array([156, 43, 46])
upper_red2 = np.array([180, 255, 255])
mask_R2 = cv.inRange(hsv, lower_red2, upper_red2)
e1 = cv.getTickCount()
mask = cv.add(cv.add(mask_B,mask_G),cv.add(mask_R1,mask_R2))
e2 = cv.getTickCount()
print((e2 - e1)/cv.getTickFrequency())
res = cv.bitwise_and(frame,frame, mask= mask)
cv.imshow('frame',frame)
cv.imshow('mask',mask)
cv.imshow('res',res)
k = cv.waitKey(5) & 0xFF
if k == 27:
break
cv.destroyAllWindows()
从视频文件捕获
import cv2 as cv
import numpy as np
cap = cv.VideoCapture("HSV捕获红绿蓝样本.mp4")
while cap.isOpened():
ret, frame = cap.read()
if not ret:
print("播放完毕,退出")
break
hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
lower_blue = np.array([106, 43, 46])
upper_blue = np.array([130, 255, 255])
mask_B = cv.inRange(hsv, lower_blue, upper_blue)
lower_green = np.array([35, 43, 46])
upper_green = np.array([77, 255, 255])
mask_G = cv.inRange(hsv, lower_green, upper_green)
lower_red1 = np.array([0, 43, 46])
upper_red1 = np.array([10, 255, 255])
mask_R1 = cv.inRange(hsv, lower_red1, upper_red1)
lower_red2 = np.array([156, 43, 46])
upper_red2 = np.array([180, 255, 255])
mask_R2 = cv.inRange(hsv, lower_red2, upper_red2)
e1 = cv.getTickCount()
mask = cv.add(cv.add(mask_B,mask_G),cv.add(mask_R1,mask_R2))
e2 = cv.getTickCount()
print((e2 - e1)/cv.getTickFrequency())
res = cv.bitwise_and(frame,frame, mask= mask)
cv.imshow('frame',frame)
cv.imshow('mask',mask)
cv.imshow('res',res)
k = cv.waitKey(5) & 0xFF
if k == 27:
break
cv.destroyAllWindows()
HSV色彩范围参考图
