这篇教学会介绍使用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()