首页 > 解决方案 > 需要使用圆霍夫变换检测图像中的最大圆

问题描述

我正在尝试制作一个可以检测图像中最大圆圈的程序。我cv2.HoughCircles()为此目的使用函数。但我没有得到想要的结果。该功能未检测到圆圈。我还必须提取检测到的圆圈。

原始图像。

原始图像

我需要的结果。

我需要的结果。

我正在使用的代码是:

import cv2 
import numpy as np
from matplotlib import pyplot as plt

image = cv2.imread('img.png', cv2.IMREAD_GRAYSCALE)
image = cv2.resize(image, (512, 512))
cv2.imwrite("Image.png", image)
imageCopy = image.copy()
image = cv2.GaussianBlur(image, (5,5), 2)

ret, threshold_image = cv2.threshold(image, 28, 255, cv2.THRESH_BINARY_INV)

circles = cv2.HoughCircles(threshold_image, cv2.HOUGH_GRADIENT, 1, 40, param1=50, param2=30, minRadius=0, maxRadius=0)
circles = np.uint16(np.around(circles))

# Finding Biggest Circle
radius = []
for i in circles[0, :]:
    radius.append(i[2])
max_radi = max(radius)


#Drawing Circles on Image
for i in circles[0, :]:
    if max_radi == i[2]:
        cv2.circle(imageCopy, (i[0], i[1]), (i[2]), (255, 255, 255), 5)
        cv2.circle(imageCopy, (i[0], i[1]), 15, (255, 255, 255), 5)


plt.subplot(131), plt.imshow(image, cmap = 'gray')
plt.title("Original"), plt.xticks([]), plt.yticks([])
plt.subplot(132), plt.imshow(threshold_image, cmap = 'gray')
plt.title("threshold"), plt.xticks([]), plt.yticks([])
plt.subplot(133), plt.imshow(imageCopy, cmap = 'gray')
plt.title("Circles Detected"), plt.xticks([]), plt.yticks([])
plt.show() 

阈值化和圆形霍夫后获得的图像

标签: image-processingimage-segmentation

解决方案


推荐阅读