opencv在写入jpeg时会降低红色亮度
我在 python 中遇到了一个关于 opencv 的有趣问题。我注意到当我使用 opencv 加载图像并立即保存它而不做任何进一步处理时,红色通道中的亮度显着降低。
- 我知道 jpeg 是一种有损格式,如果我多次读/写,我应该期望质量会下降。但是,如果我在预览 (mac) 中打开图像并从那里导出,即使导出到尽可能低的质量,我也看不到任何区别。如果我使用 openCV 来做完全相同的事情,红色通道的差异是巨大的(由于压缩,远远超过您的预期)。
- 我尝试更改所有标志(imwrite_jpeg_quality、imwrite_jpeg_luma_quality、imread_anycolor、imread_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])