insertshape函数为什么会在错误的位置绘制FilledPolygon?
代码:
I = imread('coins.png');
BW = im2bw(I, graythresh(I));
[B,L] = bwboundaries(BW,'noholes');
boundary = B{1};
boundary1 = reshape(boundary.',1,[])
newI = insertShape(I,'FilledPolygon',boundary1);
imshow(newI);
答案 0 :(得分:1)
在MATLAB中,关于矩阵索引(i,j)
(其中i
是行号)和坐标(x,y)
(其中x
是水平坐标)经常感到困惑。
请务必仔细阅读文档,以查看它是指i
和j
还是行和列,还是指x和y。
在这种情况下,bwboundaries
返回
边界像素的行和列坐标
和insertShape
期望x和y坐标。
因此,要将一个输出放到另一个中,您需要交换B{1}
的两列:
I = imread('coins.png');
BW = im2bw(I, graythresh(I));
[B,L] = bwboundaries(BW,'noholes');
boundary = B{1};
boundary = boundary(:,[2,1]); % <<< swap columns
boundary1 = reshape(boundary.',1,[]);
newI = insertShape(I,'FilledPolygon',boundary1);
imshow(newI);