OpenCV图像处理----视频处理和HSV颜色模型

news/2024/7/21 4:33:19 标签: opencv, 图像处理, 音视频

读取视频

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(每一帧的图片)

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:

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
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()

在这里插入图片描述


http://www.niftyadmin.cn/n/740502.html

相关文章

OpenCV图像处理----图像的二值化

图像二值化( Image Binarization)就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。 二值化的原理 import cv2img cv2.imread(img/lena.jpg) # 转为灰度图 new_img cv2.cvtColor(img, cv2.COLOR_BG…

OpenCV图像处理----图片卷积

图片卷积 图像滤波是尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。 线性滤波是图像处理最基本的方法,它允许我们对图像进行处理&…

机器学习----纯手撸线性回归代码

什么是线性回归? 线性回归是利用函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析, 简单来说线性回归其实是试图找到自变量与因变量之间的关系 比如房子的面积和价格: 房子的面积越大,房子的价格就越高 假设房子的面积和价…

机器学习----感知机(神经网络的基础)

什么是感知机? 机器学习中有分类和回归两大问题: 回归预测线性问题,例如房子价格、每一年的降水量 。分类给物体分类,输出之后输出判断是一个香蕉还是一个苹果。 感知机是神经网络的基础 引入问题 颜色越红,形状越圆…

机器学习----PyTorch入门

PyTorch PyTorch是一个开源的python机器学习库 PyTorch的前身是Torch,其底层和Torch框架一样,使用Python重新写了很多内容 更加灵活,支持动态图,是一个以Python优先的深度学习框架,不仅能实现强大的GPU加速&#xff…

机器学习----PyTorch中的梯度计算

什么是梯度? 在一元函数中,某点的梯度标的就说某点的导数. 在多元函数中某点的梯度表示的是由每个自变量所对应的偏导数所组成的向量在前面的线性回归中 就像y wx b方程中求出w参数最优的解,就需要对w参数进行偏导数的求取,然后通过偏导数…

机器学习----PyTorch正向传播与反向传播

正向传播 神经网络本质上就是一个复杂且有很多参数的复合函数,数据为函数的输入,结果为函数的输出。正向传播就是通过函数的输入以及神经网络,得到函数的输出。通常用来验证当前的参数是否是最优解,或者已经训练好的模型用来检测…

机器学习----PyTorch模型训练

PyTorch 在前面使用纯手工做了线性回归,线性回归的问题其实就是求解损失函数最小的情况下的w值。在PyTorch里面很多的函数都进行了封装,我们直接用就可以。 损失函数 手写损失函数 def loss(y, y_pred):"""损失函数"""…