时间:2024-07-17 来源:网络搜集 关于我们 0
RGB颜色空间和YUV颜色空间是图像处理中经常遇到的两个颜色空间,但它们的特性不一样,应用的场景有差异,所以经常会遇到有RGB转YUV、YUV转RGB的需求。
RGB颜色空间,又称红绿蓝颜色空间,是一种基于红、绿、蓝三种基本颜色进行混合的颜色空间。RGB分别代表红色(Red)、绿色(Green)和蓝色(Blue),通过不同程度的三种颜色的叠加,可以产生丰富而广泛的颜色。RGB颜色空间在计算机图像处理、显示器显示、摄影和影视制作等领域具有广泛的应用。
R、G、B取值常用8比特表示,因此代表三基色的红、绿、蓝通道分别用0~255的整数表示强度。0表示无光,亮度最暗;255表示强度最大,亮度最亮。(0,0,0)表示纯黑色;(255,255,255)表示白色。
它起源于上世纪初,当时Thomas Young和Helmholtz先后提出了视觉的三原色学说,即视网膜存在三种视锥细胞,分别对红、绿、蓝三种光线敏感。当一定波长的光线作用于视网膜时,以一定的比例使三种视锥细胞分别产生不同程度的兴奋,这样的信息传至大脑中枢,就产生某一种颜色的感觉。
在显示器发明之后,人们开始使用发出不同颜色的光的荧光粉、滤色片或半导体发光器件来形成色彩。为了再现人眼能够感受到的大多数自然色彩,人们选择了红、绿、蓝三种颜色的发光体作为基本发光单元,并通过控制它们的发光强度来实现各种颜色。
RGB颜色空间的优点是直观且容易理解。然而,其缺点是R、G、B三个分量相互高度相关,当某个分量发生变化时,颜色很可能发生改变。
YUV颜色空间,又常被称作YCbCr颜色空间,是用于数字电视的颜色空间,在ITU-R BT.601、BT.709、BT.2020标准中被明确定义,这三种标准分别针对标清、高清、超高清数字电视。Y是亮度,Cb(U)、Cr(V)表示色度,三个分量是相互独立的,它们分别表示图像的亮度、蓝色色差和红色色差。
Y分量表示图像的亮度信息,它描述了图像的明暗程度,是黑白电视信号需要的内容。U分量表示蓝色色差,它描述了蓝色和绿色之间的差异,用于还原图像中的蓝色和绿色。V分量表示红色色差,它描述了红色和绿色之间的差异,用于还原图像中的红色和绿色。
在广播电视中,使用YCbCr可解决黑白电视和彩色电视之间的信号兼容问题。
这里主要介绍BT601: 标清数字电视(SDTV) 8bit
四、Python实现
import cv2# 1. 读取图像rgb_image = cv2.imread(1280_720.bmp)# 2. 将RGB图像转换为YUV图像yuv_image = cv2.cvtColor(rgb_image, cv2.COLOR_RGB2YUV)# 3. 将YUV图像转回RGB图像rgb_image_again = cv2.cvtColor(yuv_image, cv2.COLOR_YUV2RGB)# 4. 显示图像cv2.namedWindow("rgb", 0)cv2.resizeWindow("rgb", 300, 180) # 设置窗口大小cv2.namedWindow("yuv", 0)cv2.resizeWindow("yuv", 300, 180) # 设置窗口大小cv2.namedWindow("rgb_a", 0)cv2.resizeWindow("rgb_a", 300, 180) # 设置窗口大小cv2.imshow(rgb, rgb_image)cv2.imshow(yuv, yuv_image)cv2.imshow(rgb_a, rgb_image_again)# 4. 设置窗口显示时间,单位为毫秒(这里设置为100秒,可以根据需要调整)cv2.waitKey(100000)# 5. 关闭所有窗口cv2.destroyAllWindows()五、FPGA实现
FPGA实现思路分享:分析一下上面两个公式,主要涉及乘法运算、有符号数处理、浮点数运算三个内容,需要采用流水线方式处理就行。
FPGA实现代码:暂不公开,需要的可以加入我的知识星球,正在更新图像处理实战专栏,详细文章、设计逻辑、完整工程代码都有。
六、总结颜色空间的转换是数字图像处理中的重要部分,而RGB与YUV之间的转换又是其中最常用的一种。通过了解RGB和YUV颜色空间的特性以及它们之间的转换公式,我们可以在FPGA上实现高效的颜色空间转换。
我们公众号推出了系统性的学习FPGA路径,少走弯路,少踩坑。
市面上传统的FPGA学习,对于FPGA编程思维和FPGA设计思想训练较少,学习路径很陡 。
即使把开发板的资料教程都学习了一遍,还是会有很多不理解。。代码写起来还是费劲。
我们这里提供的入门专栏,先学习verilog基础和vivado基本操作,从FPGA图像算法入手,实现各种图像算法,锻炼FPGA硬件编程思维逻辑,并在实现过程中学习各种IP的使用,时序优化。
最后基于图像处理做更复杂的项目,提升系统化设计能力和项目架构设计能力。
不玩虚的,有丰富的教程和学习资料,有完整的理论分析、C model、工程代码,代码直接可以移植应用到产品中,可以讨论交流,可以答疑。
星球有哪些内容?
星球内主打实战入门专栏,也有丰富的学习资料、教程、源码参考下载。
FPGA图像处理实战、FPGA数学运算、FPGA接口、FPGA数字信号处理等等。
加入星球后不满意可以退款吗?
可以,三天内退出星球,星球自动退全款。
欢迎大家加入,一起学习,一起交流,一起成长。
有任何疑问,微信 z987077676 找我,私信,看到会回复。
订阅后微信z987077676找我,截图支付记录,领取「FPGA资料包+定向朋友圈」