文章目录
前言
题目地址:https://docs.opencv.org/4.x/df/d9d/tutorial_py_colorspaces.html
题目内容:
Try to find a way to extract more than one colored object, for example, extract red, blue, and green objects simultaneously.
Source Code
# 开发时间:2022/2/21 21:18
import cv2 as cv
import numpy as np
cap = cv.VideoCapture(0)
while True:
# 读取帧
_, frame = cap.read()
# 转换颜色空间 BGR 到 HSV
hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
# 定义HSV中蓝色的范围
lower_blue = np.array([106, 43, 46])
upper_blue = np.array([130, 255, 255])
# 设置HSV的阈值只取蓝色
mask_B = cv.inRange(hsv, lower_blue, upper_blue)
# 定义HSV中绿色的范围
lower_green = np.array([35, 43, 46])
upper_green = np.array([77, 255, 255])
# 设置HSV的阈值只取绿色
mask_G = cv.inRange(hsv, lower_green, upper_green)
# 定于HSV中红色的范围
lower_red1 = np.array([0, 43, 46])
upper_red1 = np.array([20, 255, 255])
# 设置HSV的阈值只取红色
mask_R1 = cv.inRange(hsv, lower_red1, upper_red1)
# 注意红色有两个色域
lower_red2 = np.array([150, 43, 46])
upper_red2 = np.array([180, 255, 255])
mask_R2 = cv.inRange(hsv, lower_red2, upper_red2)
mask=mask_B+mask_G+mask_R1+mask_R2
#mask = mask_R1 + mask_R2
# dst = cv.inRange( src, lowerb, upperb[, dst] )
# 按位与掩码和原始图像
res = cv.bitwise_and(frame, frame, mask=mask)
# dst = cv.bitwise_and( src1, src2[, dst[, mask]] )
# 调整OpenCV弹出窗口大小:参考博客https://blog.csdn.net/m0_37303351/article/details/78944904
cv.namedWindow("frame", 0)
cv.namedWindow("mask", 0)
cv.namedWindow("res", 0)
cv.imshow('frame', frame)
cv.imshow('mask', mask)
cv.imshow('res', res)
k = cv.waitKey(5) & 0xFF
if k == 27:
break
cv.destroyAllWindows()
Result
总结
参考代码地址:
https://docs.opencv.org/4.x/df/d9d/tutorial_py_colorspaces.html
调整opencv弹出窗口的大小