x=imread('test.jpg');
imshow(x);
total = 0;
for i=1:2
for j=1:2
for k=1:2
total = total + abs(x(i,j,k));
end
end
end
total
无论 i、j、k 的最大值是多少,上面的代码都打印为 255。请解释
x=imread('test.jpg');
imshow(x);
total = 0;
for i=1:2
for j=1:2
for k=1:2
total = total + abs(x(i,j,k));
end
end
end
total
无论 i、j、k 的最大值是多少,上面的代码都打印为 255。请解释
它打印出 255 因为 matlab 不会溢出整数,并且数据类型是 uint8
a = repmat(uint8(100),5, 1)
a(1)+a(2)
a(1)+a(2)+a(3)
输出将是 200 和 255,因为 Matlab 将输出钳制在最大值,而不是环绕。如果您使用 Dennis 给出的 sum 函数,那么您会得到正确的值,因为 Matlab 首先转换为 double
sum(a)
应该给出 500 作为输出。
不确定您的代码片段是什么,但是如果您想对数组的绝对值求和,这真的很容易:
sum(abs(x(:)))
如果您只想要包含角落的前 2 个值的子矩阵:
subM= x(1:2,1:2,1:2)
sum(abs(subM(:)))