【问题标题】:Color gets dull: opencv cv2.imread cv2.imwrite颜色变暗:opencv cv2.imread cv2.imwrite
【发布时间】:2017-11-17 16:02:45
【问题描述】:

我正在使用 opencv 模块来读取和写入图像。这是代码,下面是我正在阅读的图像,第二张图像是在使用 cv2.imwrite() 将其保存在磁盘上之后。

import cv2

img = cv2.imread('originalImage.jpg')
cv2.imwrite('test.jpg',img)

第二张图片中的颜色很暗淡。是否有解决此问题的方法,或者我缺少某种设置参数..?

【问题讨论】:

标签: python opencv image-processing cv2


【解决方案1】:

不同之处在于初始图像(图表左侧)具有附加的 ICC 配置文件,而第二个图像(右侧)没有。

我通过运行名为 identifyImageMagick 实用程序获得了上面的图像,如下所示:

identify -verbose first.jpg    > 1.txt
identify -verbose second.jpg   > 2.txt

然后我运行了出色的 opendiff 工具(它是 ma​​cOS 的一部分),如下所示:

opendiff [12].txt

您也可以使用 ImageMagick 从第一张图片中提取 ICC 配置文件,如下所示:

convert first.jpg profile.icc

【讨论】:

  • 那么我如何在通过opencv写入图像时处理这个ICC配置文件..?
  • 不错的收获!但是,这并不能解决 OP 问题!
  • 嗨@AnderBiguri 是的,我同意它不能解决问题,但我相信有助于理解问题所在的答案是完全可以接受的,如果每个人有两个人只知道半个答案……好吧,我们也许可以在我们之间找到一个完整的答案。目前,我要说的是,我相信 OpenCV 更偏向于解决“计算机视觉问题”,并且不太倾向于担心用于打印和复制目的的色彩管理的保真度,所以我怀疑OP 需要自己考虑 ICC 配置文件。我可能错了:-)
  • @RikenMehta OpenCV 不会读取或写入 ICC 配置文件(或其他元数据),因此您需要在 OpenCV 之外寻找解决方案。
  • @SSteve 我必须制作图像蒙太奇并将其写回磁盘以供以后使用视觉效果。那么你能推荐一些我可以使用的python中的其他模块吗?
【解决方案2】:

我对@mark 提出的关于 ICC 配置文件的观点进行了一些研究。我已经找到了一种在 python PIL 模块中处理这个问题的方法。这是对我有用的代码。我还学会了使用 PNG 文件格式而不是 JPEG 来进行无损转换。

import Image
img = Image.open('originalImage.jpg')
img.save('test.jpg',icc_profile=img.info.get('icc_profile'))

我希望这对其他人也有帮助。

【讨论】:

  • 干得好 - 感谢您与社区分享您的发现。
  • 感谢@Mark,因为您发现我能够解决我的问题。
【解决方案3】:

您的第一个输入图像在元数据中关联了一些 icc-Profile,这是一个可选属性,大多数设备可能一开始就不会注入它。 ICC配置文件基本上执行一种颜色校正,并且在校准期间为每个独特的设备计算校正系数。

现代网络浏览器,图像查看实用程序在将图像渲染到屏幕之前主要考虑此 ICC 配置文件信息,这就是两个图像存在差异的原因。

但不幸的是,OpenCV 不会从图像的元数据中读取 ICC 配置来执行任何颜色校正。

【讨论】:

  • 您知道任何处理 ICC 配置文件的实用程序吗?任何语言和任何框架。?
  • 我不知道是否有任何库支持读取带有元数据的图像,但您可以查看此link 以获取 sRGB 配置文件而不是 ICC 中的图像。
猜你喜欢
  • 2021-04-13
  • 2023-03-21
  • 2017-07-13
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
  • 2019-02-28
  • 1970-01-01
  • 2021-05-29
相关资源
最近更新 更多