OpenCV的色彩空间实例

本文使用python实现。

色彩空间常用的就如下几种:RGB 、HSV 、HSI 、YCrCb(YUV)

RGB色彩就是常说的光学三原色,R代表Red(红色),G代表Green(绿色),B代表Blue(蓝色)。自然界中肉眼所能看到的任何色彩都可以由这三种色彩混合叠加而成。

HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型。

HSI〔Hue-Saturation-Intensity(Lightness),HSI或HSL〕颜色模型用H、S、I三参数描述颜色特性,其中H定义颜色的频率,称为色调;S表示颜色的深浅程度,称为饱和度,I表示强度或亮度。在HSI颜色模型的双六棱锥表示,I是强度轴,色调H的角度范围为[0,2π],其中,纯红色的角度为0,纯绿色的角度为2π/3,纯蓝色的角度为4π/3。

YCrCb即YUV,主要用于优化彩色视频信号的传输,使其向后相容老式黑白电视。与RGB视频信号传输相比,它最大的优点在于只需占用极少的频宽(RGB要求三个独立的视频信号同时传输)。其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。“亮度”是透过RGB输入信号来建立的,方法是将RGB信号的特定部分叠加到一起。“色度”则定义了颜色的两个方面─色调与饱和度,分别用Cr和CB来表示。其中,Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。而CB反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异。

色彩空间转换

import cv2 as cv


def color_space_demo(image):
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)    # RGB转灰度
    cv.imshow("gray", gray)
    hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)      # RGB转hsv
    cv.imshow("hsv", hsv)
    yuv = cv.cvtColor(image, cv.COLOR_RGB2YUV)      # RGB转yuv
    cv.imshow("yuv", yuv)
    Ycrcb = cv.cvtColor(image, cv.COLOR_RGB2YCrCb)  # RGB转ycrcb
    cv.imshow("ycrcb", Ycrcb)


src = cv.imread("C:/Users/admin/Desktop/14.jpg")  # 打开一张图片
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)  # 设置图片尺寸,自动
cv.imshow("input image", src)  # 显示图像
color_space_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

运行效果如下:

图片百度找的,如有侵权,删除免究。

通道分离与合并

# 视频过滤指定颜色
def extrace_object_demo():
    capture = cv.VideoCapture("C:/Users/admin/Desktop/23.mp4")  # 打开视频文件
    while True:
        ret, frame = capture.read() # 读取视频
        if ret is False:
            break
        hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)  # 将RGB转成HSV
        lower_hsv = np.array([156, 43, 46])         # 要过滤的颜色低值(红色)
        upper_hsv = np.array([180, 255, 255])       # 要过滤的颜色高值(红色)
        mask = cv.inRange(hsv, lowerb=lower_hsv, upperb=upper_hsv)  # 二值图像
        cv.imshow("video", frame)   # 显示原视频
        cv.imshow("mask", mask)     # 显示处理后的视频
        c = cv.waitKey(40)
        if c == 27:
            break

该函数使用效果

图片的通道分离和通道合并

src = cv.imread("C:/Users/admin/Desktop/14.png")  # 打开一张图片
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)  # 设置图片尺寸,自动
cv.imshow("input image", src)  # 显示分离前的图像
b, g, r = cv.split(src)        # 分离通道
cv.imshow("blue", b)           # 显示蓝色通道
cv.imshow("green", g)          # 显示绿色通道
cv.imshow("red", r)            # 显示红色通道
src = cv.merge([b, g, r])      # 通道合并
cv.imshow("changed image", src)  # 显示合并后的图像
cv.waitKey(0)
cv.destroyAllWindows()

分离后的效果

合并后的效果

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值