我有input image。我想创建对象周围的边界,并将边界像素标记为灰色,即128强度值。我需要this类型的输出图像。我追踪了对象的边界:
Order
但它只会在图像上绘制边界。我想围绕输入图像的对象创建这个边界。我怎样才能做到这一点?我希望我的问题很明确。
答案 0 :(得分:0)
虽然我不知道你为什么要这样,但是建议:你可能不想这样做。这样做会丢失图像信息。对于您来说,了解边界索引就足够了,并且您已经知道它们。
但是,如果您真的想要这样做,这就是您需要做的事情:
clear;
clc;
im=imread('https://i.stack.imgur.com/r7uQz.jpg');
im=im(31:677,90:1118);
level = graythresh(im);
BW = im2bw(im,level);
[B,L] = bwboundaries(BW,'noholes');
for k = 1:length(B)
boundary = B{k};
%%%%%%%%% Fill the boundary locations with he desired value.
for ii=1:size(boundary,1)
im(boundary(ii,1), boundary(ii,2))=128;
end
end
如果你想要"胖"如图像中的行,请在以下后添加:
im128=im==128;
bigboundary=imdilate(im128,ones(5));
im(bigboundary)=128;
答案 1 :(得分:-2)
您可以使用OpenCV对图像进行二值化并检测轮廓。 这是Python实现:
img = cv2.imread(r'D:\Image\temp1.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret,bw = cv2.threshold(gray,100,255,cv2.THRESH_BINARY)
_,contours,hierarchy = cv2.findContours(bw, cv2.RETR_CCOMP, 1)
for cnt in contours:
c = np.random.randint(0,256,3)
c = (int(c[0]), int(c[1]), int(c[2]))
cv2.drawContours(img,[cnt],0,c,2)
输出图片: