这是我试图从中获取圆圈的图像。
我使用灰度图像和侵蚀的差异来获得边界。
img_path= 'input_data/coins.jpg'
img = cv2.imread(img_path)
rgb,gray=getColorSpaces(img)
a,b=0,255
plt.figure(figsize=(12, 12))
erosion_se=cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
erosion = cv2.erode(gray,erosion_se,iterations = 1)
boundary=gray-erosion
image, contours, hierarchy = cv2.findContours(boundary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
plt.imshow(boundary,'gray')
我可以得到大多数边界相对不同的圆圈的圆圈。我想做两件事
获取重叠的圈数。
找到接触图像边界的圆圈。我可以通过将圆的半径与图像边界进行比较来确定。问题是 2 个特定的 blob 未被检测为圆圈。
circles = cv2.HoughCircles(boundary, cv2.HOUGH_GRADIENT, 1, 20,
param1=30,
param2=15,
minRadius=5,
maxRadius=20)
if circles is not None:
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
cv2.circle(img,(i[0],i[2]),i[3],(0,255,0),2)
cv2.circle(img,(i[0],i[2]),2,(0,0,255),3)
cv2.imshow('circles', img)
k = cv2.waitKey(0)
if k == 27:
cv2.destroyAllWindows()
下面是来自圆圈边界图像的 HoughCircles 之后的输出。突出的绿色大圆圈是不受欢迎的。我不确定为什么对于某些重叠区域,没有检测到圆圈。