imshow/imwrite 将所有像素值更改为 1
imshow/imwrite changes all pixel values to 1
我有一个用 .mat
保存的 Matlab 数据集,我正试图在 Octave GUI 中处理它。数据由图像组成,我想将它们保存为 JPG 格式(或任何其他图像格式),但在尝试显示或写入图像时我遇到了这种奇怪的行为。
这是图像的一部分显示为数组的方式:
91 90 91 88 93
88 91 86 81 88
93 100 90 85 91
93 100 94 93 96
87 87 87 87 89
但是当我写图片的时候
imwrite(img, 'D:\image_test_1.jpg')
再读一遍
img_read=imread('D:\image_test_1.jpg')
我最终得到这个:
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
我试图寻找原因,但找不到明确的答案或澄清这个问题。即使我使用 imshow
显示图像,我最终也会得到一张空白图像。
所有像素值发生了什么变化?
配置为uint8
图片
为了表明此图像使用的是 8 位 scale/format,我们可以将该数组转换为 uint8()
(无符号 8 位整数)。此格式将假定强度值范围为 0 到 255(典型的 JPG 格式)。我认为数组显示为 1s 的原因是 Octave 试图将数组解析为从 0 到 1 的双精度数。因此数组的结果达到了 1 的上限,因为 Image
/img
数组超出范围(最大值)。或者,我们可以使用 im2double()
函数将数组转换为 double 或将原始数组除以 255.
Image = [91 90 91 88 93;
88 91 86 81 88;
93 100 90 85 91;
93 100 94 93 96;
87 87 87 87 89];
Image = uint8(Image);
imwrite(Image, 'D:\image_test_1.jpg')
imshow(imread('D:\image_test_1.jpg'),'InitialMagnification','fit');
运行 使用 MATLAB R2019b
我有一个用 .mat
保存的 Matlab 数据集,我正试图在 Octave GUI 中处理它。数据由图像组成,我想将它们保存为 JPG 格式(或任何其他图像格式),但在尝试显示或写入图像时我遇到了这种奇怪的行为。
这是图像的一部分显示为数组的方式:
91 90 91 88 93
88 91 86 81 88
93 100 90 85 91
93 100 94 93 96
87 87 87 87 89
但是当我写图片的时候
imwrite(img, 'D:\image_test_1.jpg')
再读一遍
img_read=imread('D:\image_test_1.jpg')
我最终得到这个:
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
我试图寻找原因,但找不到明确的答案或澄清这个问题。即使我使用 imshow
显示图像,我最终也会得到一张空白图像。
所有像素值发生了什么变化?
配置为uint8
图片
为了表明此图像使用的是 8 位 scale/format,我们可以将该数组转换为 uint8()
(无符号 8 位整数)。此格式将假定强度值范围为 0 到 255(典型的 JPG 格式)。我认为数组显示为 1s 的原因是 Octave 试图将数组解析为从 0 到 1 的双精度数。因此数组的结果达到了 1 的上限,因为 Image
/img
数组超出范围(最大值)。或者,我们可以使用 im2double()
函数将数组转换为 double 或将原始数组除以 255.
Image = [91 90 91 88 93;
88 91 86 81 88;
93 100 90 85 91;
93 100 94 93 96;
87 87 87 87 89];
Image = uint8(Image);
imwrite(Image, 'D:\image_test_1.jpg')
imshow(imread('D:\image_test_1.jpg'),'InitialMagnification','fit');
运行 使用 MATLAB R2019b