正如@John Zwinck所提到的那样可以使用floodfill,但我想你的问题是你想要回到原始的黑色背景,并保留封闭形状的轮廓.虽然您可以用来contours解决这个问题,但这是一个相当简单的方法,它将从图像中删除所有非闭合和未闭合的线段,即使它们附着到闭合的形状,但保留闭合曲线的边缘.
输出:

代码是在python中,但应该很容易转换为通常的C++ cv2用法.
import cv2
import numpy as np
im = cv2.imread('I7qZP.png',cv2.CV_LOAD_IMAGE_GRAYSCALE)
im2 = im.copy()
mask = np.zeros((np.array(im.shape)+2), np.uint8)
cv2.floodFill(im, mask, (0,0), (255))
im = cv2.erode(im, np.ones((3,3)))
im = cv2.bitwise_not(im)
im = cv2.bitwise_and(im,im2)
cv2.imshow('show', im)
cv2.imwrite('fin.png',im)
cv2.waitKey()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1277 次 |
| 最近记录: |