参考
- Pysource Youtube教学视频
- BGR HSV颜色模型
步骤
一、 BGR 和 HSV 颜色模型
BGR Model BGR模型表示三种颜色通道:红、绿、蓝,采用BGR模型的图像的颜色就是由红绿蓝三种颜色加权和混合而成。 此类模型的缺点显而易见,就是很难去表达一种颜色。比如你修改了如下BGR中的B值,间接地, G和R通道的颜色也会被改变掉。
HSV Model H表示Hue颜色;S表示Saturation饱和度;V表示Value明度。 简单理解就是 H指定一种颜色,从0到360; S是白光所占程度,从0到1, 0表示饱和度最高,就是白光最多; V表示明度,从0到1, 0表示最暗
二、使用摄像头,利用HSV实现颜色识别
1. 思路 读取摄像头视频流,取窗口中间一点,将其像素值(BGR)转换为HSV,然后根据Hue来简单判断颜色。然后显示到窗口上。
2.代码
import cv2
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH,1080)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,780)
while True:
_, frame = cap.read()
hsv_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
height,width,_ = hsv_frame.shape
wx = int(width/2)
wy = int(height/2)
center_color = hsv_frame[wy,wx]
hue_value = center_color[0]
if hue_value < 5:
color = 'RED'
elif hue_value < 22:
color = 'ORANGE'
elif hue_value < 33:
color = 'YELLOW'
elif hue_value < 78:
color = 'GREEN'
elif hue_value <131:
color = 'BLUE'
elif hue_value < 167:
color = 'VIOLET'
else:
color ='RED'
bgr_color = frame[wy,wx]
b,g,r = int(bgr_color[0]),int(bgr_color[1]),int(bgr_color[2])
cv2.circle(frame,(wx,wy),5,(0,255,0),3)
cv2.putText(frame,color,(10,50),0,1,(b,g,r),2)
cv2.imshow('frame',frame)
key = cv2.waitKey(1)
if key ==27:
break
cap.release()
cv2.destroyAllWindows()
3.效果
|