在MATLAB中使用imwrite后像素值发生变化

3

imwrite函数的行为很奇怪。我已经修改了图像的单个像素值,但是在执行imwrite之后,该像素值要么被更改为全新值,要么保持不变。

function imwriteCheck(input_image,output_image)
a=imread(input_image);
fprintf('\nBefore modification a(1,1,1)=%d\n',a(1,1,1));
a(1,1,1)=50;
fprintf('\nAfter modification a(1,1,1)=%d\n',a(1,1,1));
imwrite(a,output_image);
b=imread(output_image);
fprintf('\nValue at b(1,1,1)=%d\n',b(1,1,1));
end

我已经测试了该函数,使用两张图片得到的输出结果如下:
>> imwriteCheck('MOM.jpg','MOMout.jpg')

Before modification a(1,1,1)=206

After modification a(1,1,1)=50

Value at b(1,1,1)=170

>> imwriteCheck('durga.jpg','durgaout.jpg')

Before modification a(1,1,1)=63

After modification a(1,1,1)=50

Value at b(1,1,1)=63

我无法理解为什么会发生这种情况。感谢您的帮助。

1个回答

4
如果您将文本写入jpg文件,由于其有损压缩技术,像素值会发生变化。您可以使用无损模式将文本写入jpg文件,但是在其他地方无法查看该图像。 尝试将文本写入bmp或png文件,您将看到像素值不会改变。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接