养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

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

时间:2024-11-10 16:21:25

本文,介绍的是基于Hough变换的圆形检测算法。

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

工具/原料

电脑

python

opencv模块

方法/步骤

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

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

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

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

3、检测半径为100的圆:r=100foriinrange(u):forjinrange(v):ifimg[i,j]!=0:forminrange(360):t=m*np.pi/180x=int(i-r*np.cos(t))y=int(j-r*np.sin(t))if0<x<uand0<y<v:acc[x,y]=acc[x,y]+1没有明显的极值点,就表示没有半径为100的圆。

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

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

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

5、用for循环检测不同半径的圆:forrinrange(45,50):ac罕铞泱殳c=img*0fo鸡堕樱陨riinrange(u):forjinrange(v):ifimg[i,j]!=0:forminrange(360):t=m*np.pi/180x=int(i-r*np.cos(t))y=int(j-r*np.sin(t))if0<x<uand0<y<v:acc[x,y]=acc[x,y]+1ifnp.max(acc)<300:passelse:cv2.imwrite('2.png',acc)x,y=np.where(acc==np.max(acc))cv2.circle(img0,(x[0],y[0]),r,(0,0,255),2)检测失败,而且很耗时。

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

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

6、opencv内置检测方法,可以同张虢咆噘时检测不同半径的圆,而且时间很短:img0=cv2.imread('0.png')img=cv2.Canny(img0,0,2笙剽茑镙55)circles=cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,100,param1=100,param2=30,minRadius=45,maxRadius=100)forcircleincircles[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)

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

© 一点知识