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

 时间:2024-10-12 09:51:12

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

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

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

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

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<x<u and 0<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循环检测不同半径的圆: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<x<u and 0<y<v: acc[x,y]=acc[x,y]+1 if np.max(acc)<300: pass else: 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,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)

【图像处理】检测圆的Hough变换算法
  • matlab如何绘制函数图像
  • JAVA聊天程序如何实现文件传送
  • MATLAB怎么开启启用集成的警告和错误消息
  • 用Protel 99 SE绘制原理图前做什么准备?
  • myeclipse如何查找替换项目关键字
  • 热门搜索
    关于元旦的手抄报 少先队手抄报 我的梦想手抄报 关于读书的手抄报图片 珍爱生命预防溺水手抄报 中国梦手抄报图片 清明节手抄报内容简短 新学期新气象手抄报 抗疫手抄报 民法典手抄报