0

我有一个用彩色笔制作的签名的分段图像“a”。背景是纯白色的。我需要计算前景像素的 rgb 分量之和,以及构成前景的总像素。这是我的代码-

r=a(:,:,1);
g=a(:,:,2);
b=a(:,:,3);
rsum=0;
gsum=0;
bsum=0;
count=0;
for i=1:h
    for j=1:w
        if r(i,j)~=255 || g(i,j)~=255 || b(i,j)~=255
            rsum=rsum + r(i,j);   
            gsum=gsum + g(i,j);
            bsum=bsum + b(i,j);
            count=count+1; 
        end
    end
end

它正确计算 count 的值,但 rsum、gsum、bsum 都设置为 255,这显然是错误的。矩阵 r,g,b 是正确的(显示 255 以外的像素)。为什么不工作?

4

1 回答 1

2

看起来像type,并且在255 处饱和rsum。尝试将总和显式转换为不同的类型。gsumbsumuint8

msk = r < 255 | g < 255 | b < 255;
rsum = sum( double( r(msk) ) );
gsum = sum( double( g(msk) ) );
bsum = sum( double( b(msk) ) );
count = sum(msk(:));

PS,
最好不要在 Matlab中使用iandj作为变量名。

于 2014-06-05T13:53:22.297 回答