Python视觉库中提供image.find_circles([roi[,x_stride=2[,y_stride=1[,threshold=2000[,x_margin=10[,y_margin=10[,r_margin=10[,r_min=2[,r_max[,r_step=2]]]]]]]]]])方法,使用霍夫变换在图像中查找圆。返回一个image.circle对象列表。
其中,roi是一个用以搜索的矩形的感兴趣区域(x,y,w,h),图像操作范围仅限于roi区域内的像素。如果未指定,默认的roi即整幅图像。
x_stride是霍夫变换时需要跳过的x像素的数量。若已知圆较大,可增加x_stride。
y_stride是霍夫变换时需要跳过的y像素的数量。若已知圆较大,可增加y_stride。
threshold控制从霍夫变换中监测到的圆。只返回大于或等于threshold的圆。应用程序的正确的threshold值取决于图像。注意:一个圆的大小(magnitude)是组成圆所有索贝尔滤波像素大小的总和。
x_margin控制所检测的圆的合并。圆像素为x_margin、y_margin和r_margin的部分合并。
y_margin控制所检测的圆的合并。圆像素为x_margin、y_margin和r_margin的部分合并。
r_margin控制所检测的圆的合并。圆像素为x_margin、y_margin和r_margin的部分合并。
利用find_circles方法检测圆形物体的例程如下:
# image.circle对象有四个值:x,y,r(半径)和magnitude。magnitude是检测圆的强度,值越高越好。
# roi是一个用以搜索的矩形区域(x,y,w,h),图像操作范围仅限于roi区域内的像素。如果未指定,默认的roi即整幅图像。
# x_stride是霍夫变换时需要跳过的x像素的数量。若已知圆较大,可增加x_stride。(www.xing528.com)
# y_stride是霍夫变换时需要跳过的y像素的数量。若已知直线段较长,可增加y_stride。
# threshold控制从霍夫变换中监测到的圆。只返回大于或等于阈值的圆。一个圆的大小是组成圆的所有索贝尔滤波像素大小的总和。
#margin的分量x_margin、y_margin和r_margin用来控制所检测的圆的合并。
#r_min,r_max和r_step用来控制测试圆的半径。缩小测试圆半径的数值可以提升搜索性能。
#阈值threshold=3500比较合适。如果视野中检测到的圆过多,需要增大阈值;相反,如果视野中检测到的圆过少,需要减少阈值。
for c in img.find_circles(threshold=2500,x_margin=10,y_margin=10,r_margin=10,r_min=2,r_max=100,r_step=2):
程序调试通过后,运行情况如图4.2所示。
图4.2 对圆形进行检测的情况
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。