RGB是为了让机器更好的显示图像,对于人类来说并不直观,HSV更为贴近我们的认知,所以通常我们在针对某种颜色做提取时会转换到HSV颜色空间里面来处理.
在opencv中的颜色阀值如下图所示:
以追踪摄像有种的蓝色为例:
import cv2
import numpy as np
flags = [i for i in dir(cv2) if i.startswith('COLOR_')]
print(flags)
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
while True:
ret,frame = cap.read()
hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
#将画面转换成HSV
lo_blue = np.array([100,43,46])
up_blue = np.array([124,255,255])
#确定蓝色的HSV范围
mask = cv2.inRange(hsv,lo_blue,up_blue)
#过滤颜色,在范围中的为255,在范围之外的为0
res = cv2.bitwise_and(frame,frame,mask = mask)
#确定掩膜
cv2.imshow('frame',frame)
#显示原图
cv2.imshow('mask',mask)
#显示过滤后的图像
cv2.imshow('res',res)
#显示与掩膜叠加后的图像
key = cv2.waitKey(1)
if key==27:
break
cv2.destroyAllWindows()
根据本RGB转换成HSV
red = np.uint8([[[0,0,255]]])
hsv_red = cv2.cvtColor(red, cv2.COLOR_BGR2HSV)
print(hsv_red)