【问题标题】:Octave imwrite loses grayscaleOctave imwrite 失去灰度
【发布时间】:2014-06-18 01:29:14
【问题描述】:

我正在使用 Octave 3.6.4 处理图像并在之后存储它。我读到的图像是灰度的,计算后矩阵应该是同一类型的。但是,如果我打开存储的图像,则没有灰色像素。只有黑白的,灰色的迷路了。它们基本上都是白色的。

这里是处理代码:

function aufgabe13()
    [img, map, alpha] = imread("Buche.png");
    [imax, jmax] = size(img);
    a = 0.7;
    M = 255 * ones(imax,jmax + round(imax * a));
    for i = 1:imax
        begin = round((imax-i)*a);
        M(i,begin +1 : begin + jmax) = img(i,:);
    end
    imwrite(M, 'BucheScherung.png', 'png');
end

那我做错了什么?

【问题讨论】:

    标签: image image-processing octave grayscale


    【解决方案1】:

    原因是因为M 是一个double 矩阵,所以在表示图像时值应该在[0,1] 之间。因为您图像中的值在读入时介于[0,255] 之间(输入uint8),所以很多值都是白色的,因为它们超出了 1 的值。您应该做的是转换图像,使其成为双精度并在[0,1] 之间进行标准化,然后正常进行。这可以通过im2double 函数来完成。

    换句话说,这样做:

    function aufgabe13()
        [img, map, alpha] = imread("Buche.png");
        img = im2double(img); % Edit
        [imax, jmax] = size(img);
        a = 0.7;
        M = ones(imax,jmax + round(imax * a)); % Edit
        for i = 1:imax
            begin = round((imax-i)*a);
            M(i,begin +1 : begin + jmax) = img(i,:);
        end
        imwrite(M, 'BucheScherung.png', 'png');
    end
    

    【讨论】:

    • 你应该使用im2double()im2uint8() 和朋友,而不是除以 255 或类似的 hack(如果下一张图像具有不同的精度会破坏)。
    • 天哪。我什至忘了我回答了这个问题哈哈。你花了很长时间才接受。
    猜你喜欢
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 2021-11-13
    相关资源
    最近更新 更多