Python 视频的色彩转换

这篇教学会介绍使用OpenCV 的cvtcolor() 方法,将视频的色彩模型从RGB 转换为灰阶、HLS、HSV...等。

因为程式中的OpenCV 会需要使用镜头或GPU,所以请使用本机环境( 参考:使用Python 虚拟环境) 或使用Anaconda Jupyter 进行实作( 参考:使用Anaconda ) ,并安装OpenCV 函式库( 参考:OpenCV函式库)。

色彩模型是什么?

色彩模型( Color model ) 是一种以数字来表示色彩的数学模型,例如在RGB 的色彩模型里,以(255,0,0) 表示红色,但在HSV 的色彩模型中,红色则是以(0,100,100 ) 来表示,用的色彩模型有:

RGB (红、绿、蓝)

RGB 颜色模型也称做三原色光模型,是一种「加色」模型,将红( Red )、绿( Green )、蓝( Blue ) 三原色的色光以不同的比例相加,混合产生各种色彩的光线,通常表现方式会使用(255,255,255) 或十六进位FFFFFF 来表现

RGBA (红、绿、蓝、alpha )

RGBA 颜色模型由RGB 色彩模型和Alpha 通道组成。RGBA 代表红( Red )、绿( Green )、蓝( Blue ) 和Alpha 通道,alpha 通道为影像的不透明度参数,数值可以用百分比、整数或者使用0 到1 的实数表示。例如,若一个像素的Alpha 通道数值为0% 表示完全透明的,无法被看见,如果数值为100% 则是完全不透明

HSV (色相、饱和度、明度 )、HSL (色相、饱和度、亮度)

HSL 和HSV 颜色模型都是一种将RGB 色彩模型中的点,转变在圆柱坐标系中的表示法。 HSL 是色相、饱和度、亮度( Hue、Saturation、Lightness ),HSV 是色相、饱和度、明度( Hue、Saturation、Value ),又称HSB ( Brightness )。

HSL 和HSV 模型都把颜色描述在圆柱坐标系内的点,这个圆柱的中心轴取值为自底部的黑色到顶部的白色而在它们中间的是灰色,绕这个轴的角度对应于「色相」 ,到这个轴的距离对应于「饱和度」,而沿着这个轴的高度对应于「亮度」、「色调」或「明度」

GRAY (灰阶)

灰阶是每个像素只有最暗黑色到最亮的白色的灰阶,灰阶影像在黑色与白色之间还有许多级的颜色深度,用于显示的灰阶影像,通常用每个采样像素8bits 的非线性尺度,内容可以包含256 种灰阶( 8bits 表示2 的8 次方= 256 )。

cvtcolor() 色彩转换

使用OpenCV 的cvtcolor() 方法,可以将转换影像色彩,使用方法如下:

复制代码
cv2.cvtColor(img, code)
# img 来源视频
# code 要转换的色彩空间名称

下方的程式码执行后,会将来源的彩色图片,转换成灰阶视频。

复制代码
import cv2
img = cv2.imread('meme.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 转换成灰阶视频
cv2.imwrite('oxxo', img)
cv2.waitKey(0)                               # 按下任意键停止
cv2.destroyAllWindows()

下方的程式码执行后,会将来源的彩色影片,转换成灰阶视频。

复制代码
import cv2
cap = cv2.VideoCapture(0)
if not cap.isOpened():
    print("Cannot open camera")
    exit()
while True:
    ret, frame = cap.read()
    if not ret:
        print("Cannot receive frame")
        break
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  # 转换成灰阶视频
    cv2.imshow('oxxostudio', gray)
    if cv2.waitKey(1) == ord('q'):
        break      # 按下 q 键停止
cap.release()
cv2.destroyAllWindows()
相关推荐
wdfk_prog7 小时前
嵌入式面试真题第 15 题:不可恢复异常后的通用崩溃快照、调用栈保存与离线分析架构
linux·开发语言·面试·架构
_Jimmy_7 小时前
FastAPI + SQLAlchemy全局事务管理
python·fastapi
晴空了无痕7 小时前
从 Go 基础到 K8s:一条可落地的 Go 服务端成长路线
开发语言·后端·golang·kubernetes
用户8356290780517 小时前
如何使用 Python 在 Excel 中添加、编辑和删除超链接
后端·python
神明不懂浪漫7 小时前
【第五章】Java中的继承与多态
java·开发语言
神州世通8 小时前
解密企业通信安全防线:Avaya Aura 三层安全架构深度解析
开发语言·php
AC赳赳老秦9 小时前
企业工商公开信息采集分析:OpenClaw 批量查询企业工商信息,生成企业画像报告
大数据·开发语言·python·自动化·php·deepseek·openclaw
qq_2518364579 小时前
基于java Web 动漫视频网站毕业论文
java·开发语言·前端
野生风长9 小时前
C++入门基础:从命名空间到引用与指针的全面解析
开发语言·c++
FoldWinCard9 小时前
D6 Python 基础语法 --- 保留关键字
开发语言·python