我是一个OpenCV的初学者,目前在做的项目要求从图片中找出圆弧。我看见大家推荐用霍夫圆在图片中寻找圆弧,依样画葫写了一段代码,却发现只能找到一部分圆弧,另外一些部分怎么也识别不了。哪位大侠可以帮忙看看,是我用错了还是霍夫圆不适用于这种情况?不胜感激
代码:
# coding:utf-8
import cv2
import numpy as np
# 读源图
img = cv2.imread(r"D:\\1.jpg")
cv2.imshow('image', img)
# 预处理
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
blur = cv2.GaussianBlur(gray, (17, 17), 0)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (10, 10))
open_ = cv2.morphologyEx(blur, cv2.MORPH_OPEN, kernel)
edge = cv2.Canny(open_, 50, 100, apertureSize=3)
# 霍夫圆
circles = cv2.HoughCircles(edge, cv2.HOUGH_GRADIENT, 1, 30, param1=100, param2=30, minRadius=0, maxRadius=0)
circles = np.uint16(np.around(circles)) #把circles包含的圆心和半径的值变成整数
for i in circles[0, : ]:
cv2.circle(img, (i[0], i[1]), i[2], (0, 0, 255), 2) #画圆
cv2.circle(img, (i[0], i[1]), 2, (0, 0, 255), 2) #画圆心
cv2.imshow("circles", img)
# 退出
cv2.waitKey(0)
cv2.destroyAllWindows()
源图:
检测结果:只识别出三个,另外几个都没能识别出来。