在RGB图像中找到感兴趣区域的边界后,我想用原始图片上的特定颜色填充它们
img=imread('I.png');
BW=~im2bw(img,0.5);
B = bwboundaries(a2);
for k = 1:length(B)
boundary = B{k};
% here should color everything inside boundary in blue
end
我可以用什么功能来做这件事?我也尝试使用 imshow()而不是在其上绘制区域,但不知道如何以原始分辨率保存它。
答案 0 :(得分:1)
如果您坚持使用多边形填充,可以使用fill
,但随后可能会遇到一些问题:
img = imread('Prueba.jpg');
figure;
imshow(img)
BW = ~im2bw(img, 0.55);
B = bwboundaries(BW);
hold on
for k = 1:length(B)
boundary = B{k};
fill(boundary(:, 2), boundary(:, 1), 'b')
end
如本例所示,图像的某些区域被边界包围,但它们实际上应该是在边界之外。
相反,通过这种方式,您可以避免此问题:
imgR = img(:, :, 1);
imgG = img(:, :, 2);
imgB = img(:, :, 3);
imgR(BW) = 0;
imgG(BW) = 0;
imgB(BW) = intmax(class(imgB));
IMG = cat(3, imgR, imgG, imgB);
figure; imshow(IMG)