【问题标题】:octave imread() question. I dont know why are they different八度 imread() 问题。我不知道他们为什么不同
【发布时间】:2021-06-28 01:45:59
【问题描述】:

我使用的是 8bit 灰度 256x256 lena 图片(图 3)。

figure; imshow(imread('lena.png'))
figure; imshow(data)
figure; imshow('lena.png')

我认为相同的输出,但它们是不同的输出:

我的代码有什么问题?

【问题讨论】:

  • 你确定 PNG 是 8 位灰度的吗?也许它是一个索引图像?你试过[data,cm] = imread('lena.png'); imshow(data,cm)吗?
  • 您可以尝试打印 imread() 使用disp data 返回的内容,看看它是否符合您对 8 位灰度(值范围从 0 到 255 的二维数组)或索引的期望跨度>
  • 非常感谢。我只是认为它有 256x 256 数据(矩阵)。
  • 这个问题很可能与这个问题重复:Reading grayscale image in matlab

标签: image octave


【解决方案1】:

从对imshow 的三个不同调用中,正确的调用似乎是您只需将文件路径传递给它的调用。阅读imshow 的源代码,您会发现它还读取图像颜色图。

似乎您没有简单的灰度图像,而是有一个索引图像,所以您应该这样做:

[img, cmap] = imread (...);
imshow (img, cmap);

顺便说一句,在我看来,您正在尝试预先分配图像数据。如果是这样,那你就做错了。

# The pre-allocation with zeros here does nothing. Not only does
# imread creates its own new array, its data type will be uint8 while
# zeros is creating one of doubles by default.
data = zeros(256, 256) ;
data = imread('lena.png');  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 2018-03-28
    • 2015-09-11
    • 2023-03-30
    • 2020-11-07
    • 2021-09-11
    相关资源
    最近更新 更多