1.导入相应的包
import cv2 as cv
import numpy as np
2.使用摄像头实时识别
cap = cv.VideoCapture(0)
#填入0表示使用第一个摄像头,也可以填入本地视频的地址
3.使用循环对视频逐帧识别
while 1:
_, frame = cap.read() # ret接收是否被正确读取,被正确读取为true,否则为false,此处用_代替
# if not ret:
# print("fail to read this video")
# break
hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)#将获取的每一帧由BGR转换成HSV格式
# 一般将 [H-10、100,100] 和 [H+10、255、255] 作为下界和上界
lower_green = np.array([35, 50, 50])
upper_green = np.array([80, 255, 255])
#确认掩膜的颜色范围
mask = cv.inRange(hsv, lower_green, upper_green)
#将结果图片进行位与操作
res = cv.bitwise_and(frame, frame, mask=mask)
cv.imshow('frame', frame)
cv.imshow('mask', mask)
cv.imshow('res', res)
k = cv.waitKey(5) & 0xFF #当按ESC键时停止程序
if k == 27:
break
有关位操作和掩膜参考这篇文章
OpenCV之bitwise_and、bitwise_not等图像基本运算及掩膜
运行结果
4.获取某种颜色的HSV值,下面以绿色为例
可以用以下代码获取某种颜色的HSV值
H(色度)范围[0,179],S(饱和度)范围[0,255],V(亮度)范围[0,255]
green = np.uint8([[[183, 213, 244]]])
hsv_green = cv.cvtColor(green, cv.COLOR_BGR2HSV)
print(hsv_green)