多语言展示
当前在线:780今日阅读:176今日分享:34

【图像处理】检测圆的Hough变换算法

本文,介绍的是基于Hough变换的圆形检测算法。
工具/原料
1

电脑

2

python

3

opencv模块

方法/步骤
1

先检测边界。img0=cv2.imread('0.png')img=cv2.Canny(img0,0,255)

2

构造一个计数器:u,v=img.shapeacc=img*0

3

检测半径为100的圆:r=100for i in range(u):    for j in range(v):        if img[i,j]!=0:            for m in range(360):                t=m*np.pi/180                x=int(i-r*np.cos(t))                y=int(j-r*np.sin(t))                if 0

4

无论怎么样,先在原图中标注出检测到的'圆':x,y=np.where(acc==np.max(acc))cv2.circle(img0,(x[0],y[0]),r,(0,0,255),2)确实检测无效,见下图。

5

用for循环检测不同半径的圆:for r in range(45,50):    acc=img*0    for i in range(u):        for j in range(v):            if img[i,j]!=0:                for m in range(360):                    t=m*np.pi/180                    x=int(i-r*np.cos(t))                    y=int(j-r*np.sin(t))                    if 0

6

opencv内置检测方法,可以同时检测不同半径的圆,而且时间很短:img0=cv2.imread('0.png')img=cv2.Canny(img0,0,255)circles= cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,100,                          param1=100,param2=30,                          minRadius=45,maxRadius=100)for circle in circles[0]:    x=int(circle[0])    y=int(circle[1])    r=int(circle[2])    cv2.circle(img0,(x,y),r,(0,0,255),2)cv2.imwrite('3.png',img0)

推荐信息