【问题标题】:Writing an array of images写入图像数组
【发布时间】:2013-11-12 19:00:55
【问题描述】:

我想在 MATLAB 中创建一个图像数组(2D uint8 数组形式的图像)。我想用它们来编写 .jpg 文件,或 imshow(基本上从 3D 整数数组访问每个 2D)。我无法将它们用于任何目的。请帮忙。 这是一个示例代码:

for k =1:no_images
    for i=1:Height
        for j=1:Width
            image(k,i,j) = uint8( k+i+j ) ;
        end
    end
    imshow( image(k) );
end

【问题讨论】:

    标签: arrays image matlab image-processing


    【解决方案1】:

    这将是工作。

    Img = image(k,:,:);
    imshow(Img);
    

    编辑

    像这样的 3D 数组,你只有灰度图像,但如果你有一个包含颜色通道的 4D 数组,它是一样的。

    Img = image(k,:,:,:);
    imshow(Img);
    

    EDIT2

    在图片之前你的图片是1xHeightxWidth,所以你只需要这样做

    Img = reshape(Img,[Height Width]); 
    

    【讨论】:

    • 我试过用这个。不起作用 :( 错误是:错误使用 imageDisplayValidateParams>validateCData(第 117 行)不支持的维度。
    • 它的作用是:size(Img) is 1 256 256 另外,当我打印时,Img(1) 是 64
    • 你需要做 Img = reshape(Img,[Height Width]); ,对不起,我错过了
    • @Maggie 试试Img = squeze(image(k,:,:))
    • @Maggie 或者更好的是使用 last 索引来引用每个图像:Img = image(:,:,k)
    【解决方案2】:

    您可能的意思是您想为这些图像预分配内存,因为imshow 只显示它们,而image(k,i,j) = uint8( k+i+j ) 只是根据循环将一个数字写入 3D 数组的每个像素(没有意义)

    随便用

     image=zeros(N,M,L,'uint8');
    

    其中 N,M,L 是 3-D 维度,用于创建 3D 零数组。然后image(:,:,n)=... 会将第 n 个图像分配到数组中。

    【讨论】:

    • 不。我使用 image(k,i,j) = uint8( k+i+j ) 部分来举例说明我正在处理表示多个图像像素的预分配 3D 数组的像素。
    【解决方案3】:

    这可能会有所帮助:

    img = cell(m, n);
    img{i, j} = Image;
    

    【讨论】:

      猜你喜欢
      • 2015-07-09
      • 2012-08-09
      • 2023-03-27
      • 1970-01-01
      • 2021-04-26
      • 1970-01-01
      • 2012-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多