读取视频
cv2.VideoCapture(0)方法参数:
- 如果参数为路径就是打开该路径的视频
- 如果参数为数字就是摄像头设备的号 一般为0
- 返回video对象
video对象:
-
get() 方法 cv2.CAP_PROP_FPS 获取fps cv2.CAP_PROP_FRAME_WIDTH 获取宽度 cv2.CAP_PROP_FRAME_HEIGHT 获取高度 -
read() 方法 读取视频的每一帧 返回flag (是否成功读取) frame (每一帧的图片)
import cv2
video = cv2.VideoCapture(0)
is_opened = video.isOpened()
fps = video.get(cv2.CAP_PROP_FPS)
width = video.get(cv2.CAP_PROP_FRAME_WIDTH)
height = video.get(cv2.CAP_PROP_FRAME_HEIGHT)
print(f'视频帧率:{fps},高度:{height},宽度:{width}')
flag, frame = video.read()
while flag:
flag, frame = video.read()
if flag:
cv2.imshow('img', frame)
cv2.waitKey(80)
HSV颜色模型
HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。
-
H:色调 用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°; -
S:饱和度 饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。 -
V:亮度 明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。 -
当S=1 V=1时,H所代表的任何颜色被称为纯色; -
当S=0时,即饱和度为0,颜色最浅,最浅被描述为灰色(灰色也有亮度,黑色和白色也属于灰色),灰色的亮度由V决定,此时H无意义; -
当V=0时,颜色最暗,最暗被描述为黑色,因此此时H(无论什么颜色最暗都为黑色)和S(无论什么深浅的颜色最暗都为黑色)均无意义。
注意: 在opencv中,H、S、V值范围分别是[0,180],[0,255],[0,255],而非[0,360],[0,1],[0,1];
判断图片中是白天还是晚上demo:
import cv2
import numpy as np
def avgV(img):
"""
计算图片亮度平均值函数
:param img: 图片矩阵
:return: 图片亮度平均值
"""
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
v_info = cv2.split(hsv_img)[2]
result = np.mean(v_info)
return result
day_img = cv2.imread('img/day.jpg')
day_avg_v = avgV(day_img)
night_img = cv2.imread('img/night.jpg')
night_avg_v = avgV(night_img)
print(f'白天的亮度平均值:{day_avg_v}')
print(f'晚上亮度平均值:{night_avg_v}')
cv2.imshow('day', day_img)
cv2.imshow('night', night_img)
cv2.waitKey()
颜色过滤
inRange()方法
- 读取一张彩色图片
- 将RGB转成HSV图片
- 定义颜色的范围,下限位(30,120,130),上限为(60,255,255)
- 根据颜色的范围使用
inRange() 方法创建一个mask
import cv2
img = cv2.imread('./img/tenis1.jpg')
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_color = (30, 120, 130)
upper_color = (60, 255, 255)
mask_img = cv2.inRange(hsv_img, lower_color, upper_color)
cv2.imshow('img', img)
cv2.imshow('mask_img', mask_img)
cv2.waitKey()
|