1圆形检测hough对噪声比较敏感,建议先进行中值滤波
调节参数,可以实现更好的识别,或者适应自己的识别
#引入opencv模块
import cv2 as cv
#引入numpy模块
import numpy as np
#引入sys模块
import sys
#circle
def circle_detection(img):
#epf边缘滤波
dst = cv.pyrMeanShiftFiltering(img,10,100)
cimg = cv.cvtColor(dst,cv.COLOR_BGR2GRAY)
#cimg = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
circles = cv.HoughCircles(cimg,cv.HOUGH_GRADIENT,1,20,param1=50,param2=30,minRadius=0,maxRadius=0)
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
cv.circle(img,(i[0],i[1]),i[2],(0,0,255),2) #圆
cv.circle(img,(i[0],i[1]),2,(255,0,0),2) #圆心
return img
def img_test():
img = cv.imread('E:/chenopencvblogimg/circle.png')
#判断是否读取成功
if img is None:
print("Could not read the image,may be path error")
return
cv.namedWindow("origin Pic",cv.WINDOW_NORMAL)
cv.imshow("origin Pic",img)
img_show = circle_detection(img)
cv.namedWindow("circle_detection",cv.WINDOW_NORMAL)
cv.imshow("circle_detection",img_show)
#让显示等待键盘输入维持在那里,否则程序跑完就闪退啦!
cv.waitKey(0)
#销毁窗口
cv.destroyAllWindows()
if __name__ == '__main__':
sys.exit(img_test() or 0)