我是靠谱客的博主 长情大侠,这篇文章主要介绍OpenCV图像处理----视频处理和HSV颜色模型,现在分享给大家,希望可以做个参考。

读取视频

cv2.VideoCapture(0)方法参数:

  1. 如果参数为路径就是打开该路径的视频
  2. 如果参数为数字就是摄像头设备的号 一般为0
  3. 返回video对象

video对象:

  1. get()方法 cv2.CAP_PROP_FPS 获取fps
    cv2.CAP_PROP_FRAME_WIDTH 获取宽度
    cv2.CAP_PROP_FRAME_HEIGHT 获取高度

  2. read()方法 读取视频的每一帧
    返回flag(是否成功读取)
    frame(每一帧的图片)

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import cv2 # 读取视频或开启摄像头 video = cv2.VideoCapture(0) # 视频是否开启成功 is_opened = video.isOpened() # 获取fps 和视频每一帧的高度和宽度 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() # flag为True就一直读取 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:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import cv2 import numpy as np def avgV(img): """ 计算图片亮度平均值函数 :param img: 图片矩阵 :return: 图片亮度平均值 """ # 转为HSV模型图片 hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # cv2的split方法可以分割出HSV模型 按顺序第三个是V通道 v_info = cv2.split(hsv_img)[2] # 计算V通道平均值 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
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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()

在这里插入图片描述

最后

以上就是长情大侠最近收集整理的关于OpenCV图像处理----视频处理和HSV颜色模型的全部内容,更多相关OpenCV图像处理----视频处理和HSV颜色模型内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部