繁体   English   中英

在 Numpy/OpenCV 中将图像从 BGR 转换为 sRGB

[英]Transform image from BGR to sRGB in Numpy/OpenCV

给定一个 BGR 格式的维度(宽度、高度、3)的 numpy 数组,如何将此图像转换为 sRGB 空间? OpenCV ( cv2 ) 没有实现这种转换,也没有对 sRGB 进行任何转换。

我进行了一些研究,但找不到任何 function 可以做到这一点,甚至找不到我可以遵循的公式来实现我自己的 function。

有什么建议或指导吗? 为什么这种转变在互联网上如此晦涩难懂?

BGR 格式已经是 sRGB,通道颠倒了。 OpenCV 将输入 sRGB 图像读取为 BGR 格式,但不对通道进行线性化。 数据按原样读取,但通道被交换。 当它写出图像时,它又是 sRGB 格式。 但是,如果输入图像是线性 RGB,那么我怀疑 OpenCV 不会改变它,如果你想要它作为 output,你必须转换为非线性 sRGB。 据我所知,OpenCV 没有在任一方向上在非线性和线性 RGB 之间切换的方法。 您可以使用 PIL 中的配置文件来做到这一点。

线性 RGB 通常用于某些类型的处理,例如调整大小以避免某些类型的细微伪影。 但是从 sRGB 开始,转换为线性 RGB,处理图像,然后再转换回 sRGB。 线性并不意味着或质量差。 它只是更暗。

这是一个非线性 sRGB 图像,看起来和预期的一样:

在此处输入图像描述

这是一个线性 RGB 图像,只是更暗:

在此处输入图像描述

线性来自 Imagemagick 的命令:

convert lena.png -colorspace RGB lena_srgb.png

非线性的是:

convert lena.png -colorspace sRGB lena_srgb.png

这对更改图像没有任何作用,因为它已经是 sRGB。

大多数工具不区分 RGB 和 sRGB。 他们通常将 sRGB 称为 RGB。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM