[python opencv 计算机视觉零基础到实战] 四、了解色彩空间及转换

1_bit 2020-12-18 22:21:10 9383

一、学习目标

  1. 了解什么是色彩空间
  2. 了解opencv中色彩空间的转换

如有错误欢迎指出~

目录

[python opencv 计算机视觉零基础到实战] 三、numpy与图像编辑
[python opencv 计算机视觉零基础到实战] 二、 opencv文件格式与摄像头读取
[python opencv 计算机视觉零基础到实战] 一、opencv的helloworld

二、了解OpenCV中常见的色彩空间

2.1 什么是色彩空间

色彩空间又可以叫做色域,英文是Color Sapce,是一种人为建立,用于表示色彩的一种“坐标系统”,或者说是一种色彩访问的取值系统,用于描述色彩。了解色彩空间对我们今后使用opencv进行图像处理很重要,在今后对图像处理时将会涉及到色彩空间的内容,所以学习了解色彩空间是有必要的。

2.2 RGB颜色空间

首先我们了解RGB颜色空间,RGB颜色空间常用于显示器。我们在之前的学习中,已经了解了计算机中的图片也是由RGB值进行描述的。RGB利用了三种物理学中的三原色,相互进行叠加融合,生成各式各样的颜色,最终构成一张多彩图像。

在RGB中,三种颜色每种都有一个通道,并且值小,则越黑,值大则越亮。我们在之前的学习中,通过实践已经知道通道都为0则为黑,通道都为255则为白,取中间值147则为灰,这也是由于“值小,则越黑,值大则越亮”这个原因。

RGB色彩空间用一个正方体进行描述,这个正方体是笛卡尔积。笛卡尔积是指两个集合进行相乘而得到的所有有可能的序列,这个序列用笛卡尔坐标系进行表示。由于在opencv中,RGB的数据类型为uint8,那么就可以有256256256=16777216种颜色,这些颜色都在这个笛卡尔坐标系中进行表示。

以下是RGB的色彩空间图,图片来源于网络。

以上图只能查看一面,其实在该立方体中,有3个定点表示三原色,也就是红、绿、蓝;还有3个顶点表示品红、黄以及青;与原点(0,0)距离最远的顶点颜色为白色,其中灰度则为黑色顶点与白色顶点形成的连线的横纵竖坐标数值大小相等的位置。

2.3 HSV颜色空间

HSV颜色空间是一种表示色调、饱和度以及亮度的颜色空间,其中H(hue)指的是色调,就是平常一些颜色,如黄色、绿色、红色等;S(saturation)指的是饱和度、V(value)指的是亮度。HSV是一种更接近于人类感知的一种颜色空间,它是根据人对色彩的观察从而产生的。

其中H色调是描述纯色,S饱和度是与白光叠加后的描述。

以下是HSV的色彩空间图,图片来源于网络。

从图中得知,色调Hue的取值为0到360,但是在opencv中取值为0-180,这点是有一定区别;S饱和度S取值范围为0.0~1.0,在opencv中取值为0-255;V亮度取值范围为0.0-1.0,在opencv在opencv中取值为0-255,0则是为黑,255则是为白。从图中我们可以得知,Value值越小则越黑,Hue则是色彩范围,S则是值越大颜色更加纯。

有一个与HSV非常相似的色彩空间,名为HSL。HSL中的L则表示为Lightness,两者类似在此不做过多讲解。

2.4 YUV颜色空间

YUV是一种色彩的编码方式,其中Y表示明亮度、U是色度、V是浓度,U和V决定了颜色。YUV一般用于优化视频信号,如彩色视频信号的传输,使信号能够与老式的黑白电视进行兼容,并且可以在传输时极大的减少频宽。

以下是YUV的色彩空间图,图片来源于网络。

2.5 opencv 色彩空间的相互转换

在opencv中,提供了图像对于不同色彩空间的转换方法,我们可以通过这些方法对图像进行不同色彩空间的转化。首先我们需要读取一张图片。代码如下:

import cv2

img = cv2.imread(r'C:\Users\mx\Desktop\1.jpg')
cv2.namedWindow("Image",cv2.WINDOW_AUTOSIZE)
cv2.imshow("Image", img)

随后我们通过cvColor方法对图片进行不同色彩空间的转换。cvColor方法接收4个参数,在此讲解此节所用到的2个参数,这两个参数分别是src与dst;src指输入的图像,类型为Array;dst指输入的图像需要转换成的色彩空间。我们首先尝试将改图片转换为HSV色彩空间图。COLOR_BGR2HSV为转换为HSV色彩空间。我们在以上代码末行加入以下代码:

hsvImage=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
cv2.imshow("hsvImage", hsvImage)
cv2.waitKey (0)
cv2.destroyAllWindows()

我们接着添加转换各个色彩空间,查看效果,整体代码如下:

import cv2

img = cv2.imread(r'C:\Users\mx\Desktop\1.jpg')
cv2.namedWindow("Image",cv2.WINDOW_NORMAL)
cv2.namedWindow("hsvImage",cv2.WINDOW_NORMAL)
cv2.namedWindow("COLOR_BGR2YUV",cv2.WINDOW_NORMAL)
cv2.namedWindow("COLOR_BGR2GRAY",cv2.WINDOW_NORMAL)

hsvImage=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)#BGR to HSV
COLOR_BGR2YUV=cv2.cvtColor(img,cv2.COLOR_BGR2YUV)#BGR to YUV
COLOR_BGR2GRAY=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#BGR to GRAY

cv2.imshow("Image", img)
cv2.imshow("hsvImage", hsvImage)
cv2.imshow("YUV", COLOR_BGR2YUV)
cv2.imshow("GRAY", COLOR_BGR2GRAY)

cv2.waitKey (0)
cv2.destroyAllWindows()

运行结果如下:
GRAY灰度:

HSV:

YUV:

三、总结

  1. 了解色彩空间是一种对色彩的描述标准
  2. 了解常见色彩空间RGB、HSV、YUV
  3. 了解使用opencv对图片实现不同色彩空间的转换
  4. 了解了色彩空间各个取值对色彩的影响
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
1_bit
红包 1 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
1_bit
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区