【发布时间】:2022-01-27 16:43:06
【问题描述】:
我正在尝试使用以下方法从图像中移除对象,但是,从结果图像中可以看出,每个对象周围都有一条残留的细彩色线。虽然我已经放大了我的图像,但线条仍然存在。
有没有办法去掉这些线?
import cv2
import numpy as np
img = cv2.imread('TRY.jpg')
image_edges = cv2.GaussianBlur(img,(3,3),1) #Helps in defining the edges
image_edges=cv2.Canny(image_edges,100,200)
image_edges=cv2.dilate(image_edges,(3,3),iterations=3)
contours_draw, hierarchy = cv2.findContours(image_edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
mask = np.zeros(img.shape, np.uint8)
mask.fill(255)
for c in contours_draw:
cv2.drawContours(mask, [c], -1, (0, 0, 0), -1)
mask = cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY)
res = img.copy()
res[mask == 0] = 255
cv2.imshow('img', res)
cv2.waitKey(0)
原图
--
结果图片
【问题讨论】:
-
原因是因为开放(非封闭)轮廓。你可以使用
for c in contours_draw: for i in range(len(c)-1): cv2.line(mask,tuple(c[i][0]),tuple(c[i+1][0]),(0,0,0),1)