OpenCV:imwrite在保存时更改通道像素值

OpenCV : imwrite changes the channels pixels values when saving

本文关键字:通道 像素 imwrite 保存 OpenCV      更新时间:2023-10-16

我正在读取一张图像,并在不更改红色和绿色通道的情况下对蓝色通道进行一些处理。

当我处理完蓝色通道后,我将三个通道合并为一个RGB图像。当我使用imshow查看频道时,一切都很好,我可以看到我所做的更改只影响蓝色频道,而不会影响红色和绿色频道。

到目前为止,一切都很好!

但是,当我使用imwrite保存图像时,得到的图像略有不同,因为在蓝色通道上所做的更改似乎传播到了红色和绿色通道,这就像imwrite在3个通道之间做了某种平均值:

 image = imread('image.jpg', IMREAD_COLOR);
 split(image, channels);
// Create some changes on channels[0]
merge(channels, 3, image);
// Up to this point every thing is alright
imwrite("modified.jpg", image); // Image changes when written;

有什么解决方案可以避免这种行为吗?

JPG是一种有损格式:https://en.wikipedia.org/wiki/JPEG

JPEG(/JAY-peg)1是一种常用的有损压缩方法数字图像的压缩,特别是那些生成的图像通过数码摄影。压缩程度可以调节,从而允许在存储大小和图像质量之间进行可选择的折衷。JPEG通常实现10:1的压缩,几乎没有明显的损失在图像质量方面。

解决方案:使用像PNG这样的lossles格式来保存您的图像。