颜色空间

颜色空间(Color Space)是描述颜色的一种方式,它是一个由数学模型表示的三维空间,通常用于将数字表示的颜色转换成可见的颜色。颜色空间的不同取决于所选的坐标轴和原点,以及用于表示颜色的色彩模型。在计算机图形学和数字图像处理中,常用的颜色空间有RGB、CMYK、YUV、YCbCr、HSV等。

RGB、YUV、YCbCr、CMYK的区别

RGB、YUV、YCbCr是三种不同的颜色空间。

RGB颜色空间是将颜色分解为红、绿、蓝三原色,这是一种加色模型,常用于计算机图形学和显示设备上。在RGB颜色空间中,每个像素由红、绿、蓝三个通道组成。

YUV和YCbCr颜色空间是一种亮度-色度模型,主要用于视频信号的编码和传输。其中,Y表示亮度(Luma),U和V或Cb和Cr表示色度(Chroma)。

在YUV颜色空间中,亮度Y表示图像的亮度信息,色度U和V表示颜色信息。Y通道只包含亮度信息,U和V通道包含颜色信息。在YUV颜色空间中,对于一幅图像,只需要传输亮度信息Y,就可以保证图像的主要内容传输。色度信息U和V可以通过亮度信息Y来计算,从而实现压缩。

YCbCr颜色空间是YUV颜色空间的一种变体,常用于数字图像和视频处理中。YCbCr颜色空间中,Y通道和YUV颜色空间中的Y通道一样,表示亮度信息,Cb和Cr通道表示色度信息。与YUV不同的是,Cb和Cr通道都经过了一定程度的色度子采样,以减少图像数据的传输量和存储空间。

总之,RGB颜色空间用于计算机图形学和显示设备,YUV 主要用于电视广播和视频传输,而 YCbCr 主要用于数字图像和视频处理,包括压缩、编码、解码和显示等领域。

YCbCr与RGB的相互转换

RGB->YCbCr

RGB颜色空间转换成YCbCr颜色空间公式如下:
Y = 0.299 R + 0.587 G + 0.114 B C b = − 0.1687 R − 0.3313 G + 0.5 B C r = 0.5 R − 0.4187 G − 0.0813 B Y=0.299R+0.587G+0.114B\\ Cb=-0.1687R-0.3313G+0.5B\\ Cr=0.5R-0.4187G-0.0813B Y=0.299R+0.587G+0.114BCb=−0.1687R−0.3313G+0.5BCr=0.5R−0.4187G−0.0813B

YCbCr->RGB

R = Y + 1.402 C r G = Y − 0.344 C b − 0.714 C r B = Y + 1.772 C b R=Y+1.402Cr\\ G=Y-0.344Cb-0.714Cr\\ B=Y+1.772Cb R=Y+1.402CrG=Y−0.344Cb−0.714CrB=Y+1.772Cb

注释

Y通道代表亮度,其取值范围为0到255。而Cb和Cr通道代表色度,其取值范围为-128到127,在具体使用时通常需要加上128的偏移量,使其取值范围变为0到255,与Y通道一致。这样做的目的是方便数据传输和处理。所以有很多其他文章的RGB到YCbCr公式加了128,需要注意其中含义,不要混淆

测试代码

import matplotlib.pyplot as plt # plt 用于显示图片
import numpy as np
import cv2
import copy# ITU-R BT.601
# https://en.wikipedia.org/wiki/YCbCr
# RGB -> YCbCr
def rgb2ycbcr(rgb):m = np.array([[ 0.299, 0.587, 0.114],[-0.1687, -0.3313, 0.5],[ 0.5, -0.4187, -0.0813]])shape = rgb.shapeif len(shape) == 3:rgb = rgb.reshape((shape[0] * shape[1], 3))ycbcr = np.dot(rgb, m.transpose())return ycbcr.reshape(shape)# ITU-R BT.601
# https://en.wikipedia.org/wiki/YCbCr
# YUV -> RGB
def ycbcr2rgb(ycbcr):m = np.array([[ 1,0, 1.402],[1, -0.344, -0.714],[ 1, 1.772, 0]])shape = ycbcr.shapeif len(shape) == 3:ycbcr = ycbcr.reshape((shape[0] * shape[1], 3))rgb = np.dot(ycbcr, m.transpose())return rgb.reshape(shape)def main():#opencv的颜色通道顺序为[B,G,R],而matplotlib颜色通道顺序为[R,G,B],所以需要调换一下通道位置img1 = cv2.imread('./yuv.jpg')[:,:,(2,1,0)] # 读取和代码处于同一目录下的 yuv.jpgimg2=rgb2ycbcr(img1)#结果展示plt.rcParams['font.sans-serif'] = ['SimHei']  # 中文乱码plt.subplot(221)#imshow()对图像进行处理,画出图像,show()进行图像显示plt.imshow(img1)plt.title('RGB原图')#不显示坐标轴plt.axis('off')# print('原RGB图像')# print(img1)#子图2plt.subplot(222)img2=rgb2ycbcr(img1)#Cb分量赋值为0img2[:,:,1]=0#Cr分量赋值为0img2[:,:,2]=0#重新转成rgb图像img3=ycbcr2rgb(img2)# print('RGB-YCbCr图像')# print(img2)img3=img3.astype(np.uint8)plt.imshow(img3)plt.title('Y通道')plt.axis('off')#子图3plt.subplot(223)# print('YCbCr-RGB图像')# print(img3)img2=rgb2ycbcr(img1)#Y分量赋值为0img2[:,:,0]=0#Cr分量赋值为0img2[:,:,2]=0#重新转成rgb图像img4=ycbcr2rgb(img2)# print(img4)img4=img4.astype(np.uint8)# print(img3)plt.imshow(img4)plt.title('Cb通道')plt.axis('off')#子图4plt.subplot(224)img2=rgb2ycbcr(img1)#Y分量赋值为0img2[:,:,0]=0#Cb分量赋值为0img2[:,:,1]=0#重新转成rgb图像img5=ycbcr2rgb(img2)img5=img5.astype(np.uint8)plt.imshow(img5)plt.title('Cr通道')plt.axis('off')# #设置子图默认的间距plt.tight_layout()#显示图像plt.show()if __name__ =='__main__':main()

运行结果

原图片

转换结果

参考

[1] YCbCr

[2] jpeg图片格式详解

[3] RGB、YUV和HSV颜色空间模型

[4] RGB和YUV色彩模式

[5] YUV颜色编码格式

[6] 在Python中正确地将RGB转换成YCbCr

[7] JPEG算法解密

颜色空间转换RGB-YCbCr相关推荐

  1. FFmpeg入门详解之121:颜色空间转换RGB和YUV的原理与实战

    5.颜色空间转换RGB和YUV的原理与实战 三种颜色空间模型:RGB.YUV.HSV 一.概述 颜色通常用三个独立的属性来描述,三个独立变量综合作用,自然就构成一个空间坐标,这就是颜色空间. 但被描述 ...

  2. 数字图像处理与Python实现-颜色空间转换-RGB颜色空间与HSV颜色空间转换

    RGB颜色空间与HSV颜色空间转换 RGB颜色空间与HSV颜色空间转换 1. 前言 2. RGB颜色空间与HSV颜色空间转换描述 3. 代码实现 1. 前言 HSV(Hue, Saturation, ...

  3. 数字图像处理与Python实现-颜色空间转换-RGB颜色空间与HSL颜色转换

    RGB颜色空间与HSL颜色转换 RGB颜色空间与HSL颜色转换 1. 前言 2. RGB颜色空间与HSL颜色转换描述 3. 程序实现 1. 前言 HSL是一种将RGB色彩模型中的点在圆柱坐标系中的表示 ...

  4. 图像颜色空间转换--RGB to Lαβ

    Lαβ 空间是作者在文章<color transfer between images>中于2001年提出来的,该空间相比于RGB空间的优点是三通道相关性很小,缺点是计算量稍大,RGB转到L ...

  5. 【颜色空间转换大集合】RGB到YIQ,RGB到HSI和HSI到RGB,RGB到YcbCr,RGB到XYZ颜色转换matlab代码的Demo,含详细的解释

    废话不说,先上图, 实现方式:matlab 实现功能: 实验目标 了解图像颜色空间的转换关系. 了解图像的文件结构. 实验内容 完成如下颜色空间的转换.(4 Points) RGB -> YIQ ...

  6. 使用Opencv将RGB颜色空间转换到HSV颜色空间/灰度图

    一. 使用cvCvtColor函数将RGB颜色空间转换到HSV颜色空间 所需函数: 1.cvCvtColor 函数功能:颜色空间转换 函数原型: void cvCvtColor( const CvAr ...

  7. RGB 转换至 YCbCr (YUV) 的计算公式

    RGB 转换至 YCbCr (YUV) 的计算公式 博客分类: Programming BBSPHP.net 对于每个取样点的 R,G,B 值, 在转换到 YUV colour space 时, 首先 ...

  8. RGB颜色空间转换HSV颜色空间 RGB2HSV算法

    这是最常用的RGB到HSV例程,还有一个额外的小优化(向除数添加1e-20f以避免需要将除法除以零): 讲解:--------------action---------------- 直接看这段代码很 ...

  9. OpenCV4机器学习(三):颜色空间(RGB、HSI、HSV、Lab、Gray)之间的转换

    前言: 本专栏主要结合OpenCV4(C++版本),来实现一些基本的图像处理操作.经典的机器学习算法(比如K-Means.KNN.SVM.决策树.贝叶斯分类器等),以及常用的深度学习算法. 系列文章: ...

最新文章

  1. centos下axel安装与使用
  2. matlab浮点运算的误差,MATLAB的eps,浮点数相对精度
  3. C#借助API实现黑盒自动化测试工具的编写
  4. php mssql 新 id,MSSQL获取当前插入数据的id
  5. java设计高并发内存池_高并发服务器-连接池的设计
  6. 面象对象设计6大原则之二:开放封闭原则
  7. 前端学习(1293):系统模块path路径操作
  8. abap 优化之ST05
  9. android车载娱乐系统场景,智能汽车、家庭娱乐系统、工业自动化场景中接口应用设计...
  10. 【最新snapshot】DCMTK3.6.1(MD支持库)安装说明
  11. python字符串截取后拼接_Python字符串拼接、截断、搜索、替换,python,截取,查找
  12. python 偏态分布调整_如何处理偏态数据
  13. 用Python爬取斗鱼各区的主播信息,并制作热度排行榜
  14. 康考迪亚大学获560万加元捐赠以鼓励创造力,是魁北克美术学院有史以来最大一笔捐赠
  15. 3D建模游戏动漫模型制作软件都有哪些?最全解析,工具免费领
  16. Laravel 6 结合网易/阿里邮箱基本邮件发送功能使用
  17. 地图服务 WMS WFS WCS TMS
  18. 计算机考试打字多快才有用,书记员考试打字诀窍(提高速度)
  19. elasticsearch ik分词实现 中文、拼音、同义词搜索
  20. 利用ffmpeg把一帧原始视频数据转换成jpg格式的图片

热门文章

  1. 【C++入门篇】深入理解函数重载
  2. Java Swing JTree:树组件
  3. 计算机专业的相关英语词汇,计算机专业英语单词大全
  4. c++新手入门(不定时更新,已肝18500字)
  5. Web前端:Web前端开发工程师工作内容网页案例设计
  6. 怎样制作网关服务器,如何设计自己的网关(一)
  7. 结构体字节对齐详解【含实例】
  8. 【嵌入式 C】嵌入式开发神器—SourceInsight的使用教程
  9. 【SQL Server】入门教程-基础篇(三)
  10. MySQL引擎和区别