从摄像机捕获
cap = cv.VideoCapture(0)
while(1):
# Take each frame
_, frame = cap.read()
# 转换BGR色彩到HSV
hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
# 定义HSR中蓝色空间的范围
lower_blue = np.array([106, 43, 46])
upper_blue = np.array([130, 255, 255])
# 设置HSV的阈值使得只取蓝色
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)
# 红色范围2
lower_red2 = np.array([156, 43, 46])
upper_red2 = np.array([180, 255, 255])
mask_R2 = cv.inRange(hsv, lower_red2, upper_red2)
# 使用cv相加,速度翻倍
# 性能测试
e1 = cv.getTickCount()
# 使用cv相加,速度翻倍
mask = cv.add(cv.add(mask_B,mask_G),cv.add(mask_R1,mask_R2))
e2 = cv.getTickCount()
print((e2 - e1)/cv.getTickFrequency())
# 按位与运算混合蒙版和图像
# 即保留蒙版对应位置不为0(不为黑色)的像素
res = cv.bitwise_and(frame,frame, mask= mask)
cv.imshow('frame',frame)
cv.imshow('mask',mask)
cv.imshow('res',res)
# esc退出
k = cv.waitKey(5) & 0xFF
if k == 27:
break
# 自动销毁所有窗口
cv.destroyAllWindows()
从视频文件捕获
# 从视频文件捕获
cap = cv.VideoCapture("HSV捕获红绿蓝样本.mp4")
while cap.isOpened():
# Take each frame
ret, frame = cap.read()
if not ret:
print("播放完毕,退出")
break
# 转换BGR色彩到HSV
hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
# 定义HSR中蓝色空间的范围
lower_blue = np.array([106, 43, 46])
upper_blue = np.array([130, 255, 255])
# 设置HSV的阈值使得只取蓝色
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)
# 红色范围2
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()
# 使用cv相加,速度翻倍
mask = cv.add(cv.add(mask_B,mask_G),cv.add(mask_R1,mask_R2))
e2 = cv.getTickCount()
print((e2 - e1)/cv.getTickFrequency())
# 按位与运算混合蒙版和图像
# 即保留蒙版对应位置不为0(不为黑色)的像素
res = cv.bitwise_and(frame,frame, mask= mask)
cv.imshow('frame',frame)
cv.imshow('mask',mask)
cv.imshow('res',res)
# esc退出
k = cv.waitKey(5) & 0xFF
if k == 27:
break
# 自动销毁所有窗口
cv.destroyAllWindows()
HSV色彩范围参考图