image-processing - 需要使用圆霍夫变换检测图像中的最大圆
问题描述
我正在尝试制作一个可以检测图像中最大圆圈的程序。我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()
解决方案
推荐阅读
- c - 将用户输入作为历史记录返回列表
- javascript - Mongodb $and 运算符无法按预期工作
- php - 类 Illuminate\Routing\Redirector 的对象无法转换为 int laravel
- python - 如何在unittest中自动生成测试用例编号?
- python - 使用 Python 转换复杂的平面文件
- javascript - 在java脚本中硬编码,一些减少此代码的建议表示赞赏
- php - 如何将具有相同结束时间的数组与下一个数组开始时间合并
- visual-studio-code - 编辑看起来不一样的多行
- ms-word - 如何检索在 webaddin 的内容控件中输入的数据
- r - 如何使用 R 中数据框中的最大列向量对(列向量)数据系列执行插值