python如何实现RGB与YCBCR颜色空间转换


小编给大家分享一下python如何实现RGB与YCBCR颜色空间转换,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!人类能够从灰度图像中获取理解场景需要的大部分信息,所以看黑白电视机并不会严重影响人对视频中场景的理解。图像的亮度和像素值成正比,如果需要增加图像的亮度,比如从黑色逐渐过渡到白色,就可以对单通道的灰度图像素值进行增加来实现。保存灰度图像的每个像素值一般采用8个bit,像素值的范围为0-255。下面的例子展示了灰度图像的像素值增加时亮度的变化过程,假设图像初始像素值为0:上面显示了lena图像像素值增加时肤色的变化。代码的实现比较简单,读取图片,然后不断的对图像的每个像素值增加偏移量:RGB模型在硬件设备中被广泛的使用,通过R(红色)、G(绿色)、B(蓝色)三者进行叠加可以形成更多的颜色。RGB颜色空间和后面将要进行介绍的YCbCr颜色空间和HSV颜色空间存在线性的变换关系,所以只要拥有RGB图像就能得到其它颜色空间的图像。一幅图像中R、G、B分别作为三个通道,如果某两个通道的值为0,图像的颜色就会被不为零的那个通道控制。比如:实现上面的效果需要三个步骤:(1)创建一幅3通道的空图像(2)给3通道空图像的R通道添加一幅单通道图像(3)给3通道图像的R通道像素值不断增加偏移量但是,由于最终图像呈现出的颜色是三RGB三者的叠加,而现实中不仅仅是其中之一的颜色,所以很难控制最终图像的颜色,所以我们需要其它的颜色空间。YCbCr颜色空间中的Y是亮度通道,Cb是蓝色分量,Cr是红色分量。它在电视系统中比较常用,比如早期的黑白电视机使用彩色电视信号线,就可以单独使用亮度值;这种功能RGB颜色空间就做不到,因为我们不能仅仅使用RGB中某个通道作为亮度信号来使用。由于YCbCr经常和YUV颜色空间比较相似,所以二者容易被认为是从属或者等价关系,按照维基百科的说法:YUV 是模拟信号,而YCbCr是数字信号。YCbCr和RGB存在线性的变换关系,本文介绍的变换矩阵来自ITU.BT-601,所规定的变换矩阵Trans形式如下:实现rgb2ycbcr()函数只需要两个步骤:(1)创建变换矩阵Trans;(2)遍历图像每个像素点,并对三个通道分别进行矩阵计算。下面的代码展示了如何实现从RGB空间到YCBCR变换:如果想要求逆变换,只需要根据矩阵求逆法则进行就可以了,需要注意的是:逆变换时偏移矩阵也需要左乘变换矩阵Trans的逆!逆变换只需要将rgb2ycbcr中的transform_matrix求逆即可,再次强调:shift_matrix也需要乘以transform_matrix的逆,而不是直接减去shift_matrix!所需要的包以及绘图代码如下,绘图用到的就是上面免费云主机域名定义的两个函数。首先将rgb转为ycbcr,在从ycbcr转为rgb:下图中左边是原始的rgb图像,中间是转换得到的ycbcr空间图像,右边是再次转回rgb空间的图像:最后,对比了opencv提供的标准库的转换效果:opencv得到的结果如下:原始rgb效果和cycle(重构)效果很接近,而中间结果不一致是因为opencv采用的是“ycrcb”,而不是“ycbcr”。以上是“python如何实现RGB与YCBCR颜色空间转换”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注百云主机行业资讯频道!

相关推荐: 如何使用Python matplotlib绘制xkcd动漫风格的图表

这篇文章主要介绍如何使用Pythonmatplotlib绘制xkcd动漫免费云主机域名风格的图表,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!xkcd是兰道尔门罗(Randall Munroe)的网名,又是他所创作的漫画的名称。作者兰道…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 01/12 16:44
下一篇 01/12 16:44

相关推荐