Необходимо определить самый большой круг на изображении, используя преобразование круга. - PullRequest
0 голосов
/ 29 февраля 2020

Я пытаюсь создать программу, способную определять самый большой круг на изображении. Я использую функцию cv2.HoughCircles() для этой цели. Но я не получаю желаемых результатов. Функция не обнаруживает круг. Я также должен извлечь извлеченный обнаруженный круг.

Исходное изображение.

Original Image

Необходимые результаты.

The Result I need.

Код, который я использую:

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 Obatined after thresholding and circle hough

...