尝试找到一种方法来提取多个彩色对象,例如,同时提取红色,蓝色,绿色对象。
import cv2 as cv
import numpy as np
cap = cv.VideoCapture(0)
while (1):
#读取帧
_,frame = cap.read()
#转换颜色空间BGR到HSV
hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
# #定义HSV中蓝色的范围
lower_blue = np.array([100, 50, 50])
upper_blue = np.array([124, 255, 255])
# #定义HSV中红色的范围
lower_red = np.array([156, 50, 50])
upper_red = np.array([180, 255, 255])
#定义HSV中绿色的范围
lower_green = np.array([35, 50, 50])
upper_green = np.array([77, 255, 255])
#设置HSV的阈值使得只取蓝色
mask_blue = cv.inRange(hsv, lower_blue, upper_blue)
mask_red = cv.inRange(hsv, lower_red, upper_red)
mask_green = cv.inRange(hsv, lower_green, upper_green)
#将掩膜和图像逐像素相加
res_blue = cv.bitwise_and(frame, frame, mask= mask_blue)
res_red = cv.bitwise_and(frame, frame, mask= mask_red)
res_green = cv.bitwise_and(frame, frame, mask= mask_green)
res_blue_red = cv.add(res_blue,res_red)
res = cv.add(res_blue_red,res_green)
cv.imshow('frame',frame)
cv.imshow('mask_blue',mask_blue)
cv.imshow('mask_red',mask_red)
cv.imshow('mask_green',mask_green)
cv.imshow('res_blue',res_blue)
cv.imshow('res_red',res_red)
cv.imshow('res_green',res_green)
cv.imshow('res',res)
k = cv.waitKey(5)&0xFF
if k == 27:
break
cv.destroyAllWindows()