RGB图像转换成YCbCr图像,rgb2ycbcr的使用,转换参数_呆呆象呆呆的博客-程序员宅基地

技术标签: 编程  

原理

YCbCr到RGB的转换

 Y’ = 0.257*R' + 0.504*G' + 0.098*B' + 16

 Cb' = -0.148*R' - 0.291*G' + 0.439*B' + 128

 Cr' = 0.439*R' - 0.368*G' - 0.071*B' + 128

函数使用举例

注意事项

输入:0-1的浮点型numpy矩阵代表RGB空间

输出:0-255的浮点型numpy矩阵代表YCbCr空间

image.shape为[W*H*C]的RGB图像

使用情况1

当image每一个像素点的取值范围为0-255时候

需要先转换成0-1,因为在下面的源码分析中可以看到他给的相乘系数是65.481 … -18.214 这些是针对已经归一化到0-1的数值来讲的系数

否则这个系数和后面的16,128等偏移就不会对应了

from skimage.color import rgb2ycbcr
image_rgb = image_rgb/255.0#此时可以转换成浮点型
image_ycbcr = rgb2ycbcr(image_rgb)
此时输出为0-255的浮点型YCbCr空间图像

使用情况2

当image每一个像素点的取值范围为0-1时候

from skimage.color import rgb2ycbcr
image_ycbcr = rgb2ycbcr(image_rgb)
此时输出为0-255的浮点型YCbCr空间图像

源码解释说明

# 空间转换所需要的使用到的参数
ycbcr_from_rgb = np.array([[    65.481,   128.553,    24.966],
                           [   -37.797,   -74.203,   112.0  ],
                           [   112.0  ,   -93.786,   -18.214]])
# 通用做图像空间变换的转换函数
def _convert(matrix, arr):
    """Do the color space conversion.
    Parameters
    ----------
    matrix : array_like
        The 3x3 matrix to use.
    arr : (..., 3) array_like
        The input array. Final dimension denotes channels.
    Returns
    -------
    out : (..., 3) ndarray
        The converted array. Same dimensions as input.
    """
    arr = _prepare_colorarray(arr)

    return arr @ matrix.T.astype(arr.dtype)

# 将RGB图像通过转换矩阵转换成YCbCr
def rgb2ycbcr(rgb):
    """RGB to YCbCr color space conversion.
    Parameters
    ----------
    rgb : (..., 3) array_like
        The image in RGB format. Final dimension denotes channels.
    Returns
    -------
    out : (..., 3) ndarray
        The image in YCbCr format. Same dimensions as input.
    Raises
    ------
    ValueError
        If `rgb` is not at least 2-D with shape (..., 3).
    Notes
    -----
    Y is between 16 and 235. This is the color space commonly used by video
    codecs; it is sometimes incorrectly called "YUV".
    References
    ----------
    .. [1] https://en.wikipedia.org/wiki/YCbCr
    """
    arr = _convert(ycbcr_from_rgb, rgb)
    arr[..., 0] += 16
    arr[..., 1] += 128
    arr[..., 2] += 128
    return arr

LAST、参考文献

YCbCr与YUV的区别_machh的专栏-程序员宅基地_yuv和ycbcr的区别

scikit-image/simple_metrics.py at main · scikit-image/scikit-image · GitHub

scikit-image/colorconv.py at main · scikit-image/scikit-image · GitHub

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41554005/article/details/114412888

智能推荐

安全架构-加密算法-非对称加密_公司月是非对称加密技术公月和私月不同但是可以基于私月生成公约_ctotalk的博客-程序员宅基地

安全架构-加密算法-非对称加密前面的文章介绍了对称加密,安全架构-加密算法-对称加密,本文来介绍一下非对称加密。文章目录安全架构-加密算法-非对称加密前言一、简介二、特点三、主要算法四、工作原理四、应用场景五、与对称加密比较总结前言非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 非对称加密_公司月是非对称加密技术公月和私月不同但是可以基于私月生成公约

河狸_wangchinaking的博客-程序员宅基地

河狸是一种生活在水中的四足动物. 据说它的阴部可用来治疗某种病,因此人们一见它就追逐,要捉住它,割下它的阴部来. 河狸知道被追赶的原因,便依靠腿的力量竭力逃窜,以保护自己的身体. 每到它将要被捉住时,它便把自己的阴部撕扯下来,抛出去,这样就能维护自己的生命.

索引,视图,存储过程,触发器_触发器,存储过程,视图,索引_泉森杰的博客-程序员宅基地

一. 索引1.1 索引概念MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护者满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。如下面的示意图所示左边是数据表,一共有两列七条记录,最左边的是数据记录的物理地址(注意逻辑上相邻的记..._触发器,存储过程,视图,索引

sqlserver openrowset mysql_sqlserver OpenRowSet 对应的三种数据库驱动_普林西斯的博客-程序员宅基地

在使用sqlserver数据库的OpenRowSet函数时,会遇到三种驱动方式: 1. MSDASQL驱动 SELECT TOP 10 * FROM OPENROWSET('MSDASQL', 'DRIVER={SQL Server};SERVER=xxx;UID=xx;PWD=xxx;', 'select * from AdventureWorks.HumanResources.Employee..._sqlserver openrowset

Linux基础知识大合集_linux -rwxr 更换为-rwsr_苏 浩 。的博客-程序员宅基地

一个刚入门的Linux小菜鸟,将自己所学所获在这里记录。本文所用VMware、MobaXterm以及Centos 7版本。_linux -rwxr 更换为-rwsr

Java类和对象(三)_烧水匠的博客-程序员宅基地

本文将关注面向对象的第三大要素:多态。文章开始先介绍多态的使用方法,然后介绍为什么使用多态。使用多态之前需要先知道三种技术继承 向上转型 复写(override)我们姑且把这三种技术称为多态的三要素吧,继承已经在Java类和对象(二)里面描述过了,这里不再赘述。向上转型向上转型就是把子类对象转换成父类对象。因为子类继承自父类,子类对象包含了父类对象的信息,所以可以把子类对象转换为...

随便推点

Cesium任意多边形模型裁剪与压平_cesium压平分析_hanxie0810的博客-程序员宅基地

技术交流:QQ群:785386018局部淹没,着色器_cesium压平分析

gitlab webhook php exec 调用 shell 脚本。shell 脚本中调用 git pull 命令无法执行。_weixin_33997389的博客-程序员宅基地

情况如下:我在ubuntu server 14.04 上面安装了gitlab,来托管项目代码。然后想通过gitlab的web hook 功能来做测试服务器代码自动化更新代码功能。现在遇到一个问题:就是我客户端在master分支上面push代码的时候,我测试服务器的代码目录并没有自动更新。我的shell脚本如下:!/bin/bashecho 'haha:::==' >> /t..._shell不执行git pull

近十年NMF文献列表_weixin_34342905的博客-程序员宅基地

1 综述(18 articles)(1), D. D. Lee, H.S.Seung.Learning the parts of objects by non-negative matrix factorization, Nature, 1999(2), 刘维湘等, 非负矩阵分解及其在模式识别中的应用. 科学通报, 51(3), 2006(3), Hopke P K. A ...

面试感悟----一名3年工作经验的程序员应该具备的技能+ 人生感悟+人生规划_工作2年的程序员应该具备的技术_出走半生归来仍是少年的博客-程序员宅基地

前言因为和同事有约定再加上LZ自己也喜欢做完一件事之后进行总结,因此有了这篇文章。这篇文章大部分内容都是面向整个程序员群体的,当然因为LZ本身是做Java开发的,因此有一部分内容也是专门面向咱们Java程序员的。简单先说一下,LZ坐标杭州,13届本科毕业,算上年前在阿里巴巴B2B事业部的面试,一共有面试了有6家公司(因为LZ不想请假,因此只是每个晚上去其他公司面试,所以面试的公司比较少),..._工作2年的程序员应该具备的技术

Spring MVC之源码速读之RequestMappingHandlerAdapter_weixin_34292959的博客-程序员宅基地

spring-webmvc-4.3.19.RELEASE下面来看DispatcherServlet中的执行: /** * Exposes the DispatcherServlet-specific request attributes and delegates to {@link #doDispatch} * for the actual d...

PYTHON sklearn库降维聚类实战——威斯康辛州乳腺癌数据集聚类_x_iso = manifold.isomap(n_neighbors).fit_transform_Lvengda的博客-程序员宅基地

PYTHON sklearn库降维聚类实战——威斯康辛州乳腺癌数据集聚类威斯康辛州乳腺癌数据集此数据集是sklearn.datasets的内置数据集,包含了威斯康辛州记录的569个病人的乳腺癌恶性/良性(1/0)类别型数据(训练目标),以及与之对应的30个维度的生理指标数据。本次实验使用了随即投影、T-SNE、PCA、Isomap四种降维方法和DBScan、K-means、GMM三种聚类方..._x_iso = manifold.isomap(n_neighbors).fit_transform(x) typeerror: __init__()

推荐文章

热门文章

相关标签