知道为什么代码不起作用。它所做的就是给我一张空白的白色图像。而且,如果您不以零(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
空白图片
答案 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
类型进行显示和读取/写入文件,来进行缩放或来回转换。