【发布时间】:2021-04-21 15:11:38
【问题描述】:
给定一个 BGR 格式的 numpy 尺寸数组(宽度、高度、3),我如何将此图像转换为 sRGB 空间? OpenCV (cv2) 没有实现这种转换,也没有实现任何对 sRGB 的转换。
我进行了一些研究,但找不到任何可以执行此操作的函数,甚至找不到我可以遵循的公式来实现我自己的函数。
有什么建议或指导吗?为什么这种转变在互联网上如此晦涩难懂?
【问题讨论】:
-
我怀疑 BGR 格式已经是 sRGB,通道颠倒了。 OpenCV 将输入的 sRGB 图像读取为 BGR 格式,但不对通道进行线性化。数据按原样读取,但通道被交换。当它写出图像时,它又是 sRGB 格式。但是,如果输入是线性 RGB,那么我怀疑它不会改变它,您必须转换为非线性 sRGB。这可以通过配置文件来完成。
-
@fmw42 如果像素值是线性的,您就会知道,因为它们将大于每个通道 8 位。而且线性和sRGB之间的转换很容易找到,从维基百科开始。
-
线性并不意味着你有超过 8 位。线性 RGB 只会比 sRGB 更暗
-
@fmw42 你是对的,线性并不自动意味着超过 8 位。但实际上,8位或更少的线性图像不会很有用,质量会太差。所以你不太可能遇到一个。
-
线性 RGB 通常用于某些类型的处理,例如调整大小以避免某些类型的细微伪影。但是从 sRGB 开始,转换为线性 RGB,进行处理,然后再转换回 sRGB。这不是质量差。它只是更暗。