代码之家  ›  专栏  ›  技术社区  ›  Rob Teeuwen

opencv在写入jpeg时降低红色亮度

  •  2
  • Rob Teeuwen  · 技术社区  · 5 年前

    我遇到了一个关于python中opencv的有趣问题。我注意到,当我使用opencv加载图像并立即保存时,红色通道中的亮度显著降低,无需进行任何进一步处理。

    • 我知道jpeg是一种有损格式,如果我读/写了很多次,我应该期望质量会下降。但是,如果我在预览(mac)中打开图像并从那里导出,我看不到任何差异,即使我导出到可能的最低质量。如果我使用openCV做完全相同的事情,红色通道中的差异是巨大的(由于压缩,比您预期的要大得多)。
    • 我尝试更改所有标志(imwrite\u jpeg\u质量、imwrite\u jpeg\u luma\u质量、imread\u anycolor、imread\u unchanged等)。我找不到任何能阻止这种效果的组合。
    • 为了测试它是否只是红色通道,我试着用一张绿色苹果的图片(没有区别),和一张橙色的图片(眼睛可以看到红色减少)。为了确保它与图像文件本身无关(损坏了?),我还拍摄了一张橙色的屏幕截图,将其导出为一个新的jpeg文件,并尝试使用python进行读/写,然后再次更改了颜色。
    • 我附上了橙色之前/之后的图像。如果您在各自的选项卡中打开两个图像并来回切换,差异就会变得非常明显。
    • 如果我使用opencv读取已处理的图像(红色减少),并再次导出,则红色不会进一步减少。它仅在opencv第一次处理图像时发生。

    这是我的代码:

    import cv2
    loc = '/imagetest/'
    img = cv2.imread(loc + 'orange.jpg', cv2.IMREAD_UNCHANGED)
    cv2.imwrite(loc + 'orange_processed.jpg',img,[cv2.IMWRITE_JPEG_QUALITY, 100])
    

    enter image description here enter image description here

    0 回复  |  直到 5 年前