0

我目前正在使用 MATLAB 研究一些图像处理算法,它需要加载目录中的图像并将其转换为灰度。经过一些其他处理后,图像中的所有像素的值都是 0 或 255。然后我使用以下方法存储图像:

// temp is of type double
imwrite(temp,'FAST_tree_test_image_1_gray_matlab.jpg');

之后,我使用以下方法重新加载图像:

// image is not defined before hand; its automatically set to type UINT8
image = imread('FAST_tree_test_image_1_gray_matlab.jpg');

当我用变量编辑器查看图像的值时,值是不同的.. 几乎所有 255 个值都变成了 252,许多像素在存储图像之前是 0,变成了 2..

为什么会这样?是关于格式化的吗?我该如何解决这个问题?如果我必须在 Visual Studio 中使用 OpenCv 加载此图像,值将如何变化?

4

1 回答 1

1

这是正常的,因为您以 JPEG 格式保存,该格式使用有损压缩,因此您得到的图像非常相似,但添加了一些噪声(这就是颜色计数比 2 种原始颜色多一点的原因)。

我建议您将图像保存为 PNG 格式(它使用无损压缩并且可以获得良好的压缩比)。

于 2013-01-10T04:14:31.263 回答