OpenCV:imwrite在保存

时间:2016-04-15 13:32:05

标签: c++ opencv

我正在阅读图像并在蓝色通道上进行一些处理而不更改红色和绿色通道。

当我完成蓝色通道的处理后,我将三个通道合并为一个RGB图像。当我使用imshow查看频道时,每件事情都没问题,我可以看到我所做的改变只影响蓝色通道,它们不影响红色和绿色通道。

到目前为止,每件事都没问题!

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

 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;

有没有解决方法可以避免这种行为?

1 个答案:

答案 0 :(得分:3)

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

  

JPEG(/dʒeɪpɛɡ/ JAY-peg)1是一种常用的有损方法   压缩数字图像,特别是对于那些生成的图像   通过数码摄影。压缩程度可以调整,   允许在存储大小和图像质量之间进行可选择的权衡。   JPEG通常实现10:1压缩,几乎没有可察觉的损失   在图像质量。

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