通过循环制作图像副本无效

时间:2019-03-25 15:37:26

标签: matlab loops matrix

知道为什么代码不起作用。它所做的就是给我一张空白的白色图像。而且,如果您不以零(x,y)之前声明矩阵,则它可以正常工作。这是哪里错了?

我试过不声明零点矩阵,只有这样才行。我什至尝试做img2(i,j)= img2(i,j)+ img1(i,j)

for fName in time_*pow_*.txt; do
    s="${fName#time_}"
    cat "$fName" >> time_"${s%%pow*}".txt
done

空白图片

1 个答案:

答案 0 :(得分:1)

这是由于您的新图像(类型为double,默认为zeros创建的图像)与原始图像的类型(通常为uint8)不同的结果。您可以通过使用class函数将新图像初始化为与原始图像相同的数据类型并传递an additional argument to zeros来解决此问题:

imgTemp = zeros(rows, columns, class(img));

当您未初始化imgTemp时它可以正常工作的原因是,在执行第一个索引分配时,MATLAB默认使用img的数据类型为您初始化变量。

imshow实用程序期望使用标准image types in MATLAB之一。类型double的图像的值应在[0 1]范围内,而类型uint8的图像的值应在[0 255]范围内。在您的示例中,您可能有一个imgTemp类型的矩阵double,但其值跨越[0 255]。解决问题的另一种方法是显式告诉imshow用于显示的值范围(因为默认的[0 1]不起作用)

imshow(imgTemp, [0 255]);

在处理或处理图像时始终要注意数据类型。您可能需要使用double类型进行计算(由于整数饱和)和uint8类型进行显示和读取/写入文件,来进行缩放或来回转换。