我一直在努力解决这个问题。我一直在尝试用Python中的OpenCV中的某种方式来填充图像中的圆圈,而这些圆圈完全是黑白的。
要清楚这个图像已经使用自适应阈值进行了阈值处理,但现在我已经拥有了这些我希望能够填写的环。理想情况下,无论使用哪种算法来填充圆圈都应该能够我包含的图片。
如果有人能在这方面提供任何指导,我会非常感激。
答案 0 :(得分:2)
Google中的简单搜索会为您提供this article,这完全可以回答您的问题。
我为你的输入采用了这个解决方案:
import cv2
import numpy as np
# Read image
im_in = cv2.imread("circles.jpg", cv2.IMREAD_GRAYSCALE)
# Threshold
th, im_th = cv2.threshold(im_in, 127, 255, cv2.THRESH_BINARY)
# Copy the thresholded image
im_floodfill = im_th.copy()
# Mask used to flood filling.
# NOTE: the size needs to be 2 pixels bigger on each side than the input image
h, w = im_th.shape[:2]
mask = np.zeros((h+2, w+2), np.uint8)
# Floodfill from point (0, 0)
cv2.floodFill(im_floodfill, mask, (0,0), 255)
# Invert floodfilled image
im_floodfill_inv = cv2.bitwise_not(im_floodfill)
# Combine the two images to get the foreground
im_out = im_th | im_floodfill_inv
# Display images.
cv2.imwrite("circles_filled.png", im_out)
输入文件circles.png:
输出文件circles_filled.png:
答案 1 :(得分:1)
您还可以通过绘制轮廓来填充圆圈。
import cv2
import numpy as np
#Run Main
if __name__ == "__main__" :
image = cv2.imread("circle.jpg", -1)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY)
_,contours,_ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
cv2.drawContours(image, contours, -1, (255,255,255), thickness=-1)
cv2.namedWindow('Image', cv2.WINDOW_NORMAL)
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()