C++ OpenCV霍夫变换 |
您所在的位置:网站首页 › 霍夫曼圆检测 › C++ OpenCV霍夫变换 |
霍夫圆变换 霍夫圆变换的基本思路是认为图像上每一个非零像素点都有可能是一个潜在的圆上的一点,跟霍夫线变换一样,也是通过投票,生成累积坐标平面,设置一个累积权重来定位圆。如下图: ![]() ![]() 相关的API介绍 cv::HoughCircles ![]() ![]() 代码演示 新建一个项目opencv-0018,配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法 ![]() ![]() 因为要找圆,这次我们换了一个图片,运行起来先把原图和目标图都一起显示出来 ![]() 霍夫圆检测 流利来说 改为灰度图中值滤波霍夫圆检测在源图上画出来![]() 我们来看看运行效果 ![]() 可以看到用蓝色标的右边检测出两个圆来,但是最大的白色并没有检测出来 我们重新看一下霍夫的圆检测的函数 cv::HoughCircles(src, circles, CV_HOUGH_GRADIENT,1, 10, 100, 30, 5, 50); 最后一个参数是最大半径是50,我们再扩大一点改为80 cv::HoughCircles(src, circles, CV_HOUGH_GRADIENT,1, 10, 100, 30, 5, 80); 运行效果 ![]() 可以看到这回检测出来白色的球了,但是上面的黑色圆因为是个侧面,所以出现了检测出两个圆来 说明还是参数的问题,我们再修改一下 cv::HoughCircles(src, circles, CV_HOUGH_GRADIENT,1, 10, 100, 30, 5, 80); 第五个参数10是用来检测最短距离的,我们把这个扩大一些,改为30 cv::HoughCircles(src, circles, CV_HOUGH_GRADIENT,1, 30, 100, 30, 5, 80); 运行的效果 ![]() 可以看到,我们现在检测的都是正常了 所以说我们在使用圆检测的时候需要多次测试才能得到想要的结果。 -END- |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |