我将使用OpenCV库来检测图像中的圆形。作为测试案例,我使用以下图像:
罐底部: 我写了以下代码,应该会先显示未检测到圆的图片,然后显示检测到圆的图片:
我得到了这个:结果图像 我觉得我的问题在于使用
罐底部: 我写了以下代码,应该会先显示未检测到圆的图片,然后显示检测到圆的图片:
import cv2
import numpy as np
image = cv2.imread('can.png')
image_rgb = image.copy()
image_copy = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
grayscaled_image = cv2.cvtColor(image_copy, cv2.COLOR_GRAY2BGR)
cv2.imshow("confirm", grayscaled_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
circles = cv2.HoughCircles(image_copy, cv2.HOUGH_GRADIENT, 1.3, 20, param1=60, param2=33, minRadius=10,maxRadius=28)
if circles is not None:
print("FOUND CIRCLES")
circles = np.round(circles[0, :]).astype("int")
print(circles)
for (x, y, r) in circles:
cv2.circle(image, (x, y), r, (255, 0, 0), 4)
cv2.rectangle(image, (x - 5, y - 5), (x + 5, y + 5), (0, 128, 255), -1)
cv2.imshow("Test", image + image_rgb)
cv2.waitKey(0)
cv2.destroyAllWindows()
我得到了这个:结果图像 我觉得我的问题在于使用
HoughCircles()
函数。其用法为:
cv2.HoughCircles(image, method, dp, minDist[, circles[, param1[, param2[, minRadius[, maxRadius]]]]])
其中 minDist
是一个大于 0 的值,要求检测到的圆之间必须有一定距离。由于这个要求,我无法正确检测罐底上所有的圆,因为每个圆的中心都在同一个位置。轮廓是否是解决方案?如何将轮廓转换为圆形,以便我可以使用它们的中心点坐标?为了最好地检测罐底上每个环中的圆形对象,我应该怎么做?
image_copy = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
应该改为image_copy = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
。 - Micka