OpenCV中霍夫圆检测为什么总得到不存在的圆?

KawhiGuo 2017-07-14 10:10:23
如题,
...全文
2105 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
to_better_Polaris 2019-05-13
  • 打赏
  • 举报
回复
题主用的是opencv中的库函数吗?我觉得应该是你的参数设置没有调好,cv2.HoughCircles(image,method,dp,minDist, circles,param1, param2,minRadius,maxRadius)。建议你调一下函数中的param2,param2越大,检测到的圆越少越可靠;param2越小,检测到的圆越多,越不可靠。
WNANPHOTO 2018-10-04
  • 打赏
  • 举报
回复
霍夫圆检测对于噪声比较敏感,所以首先要对图像进行中值滤波,然后转为灰度图像。
楼主可以参考一下这段代码:
#include <opencv2\opencv.hpp>
#include <iostream>
#include <math.h>

using namespace std;
using namespace cv;
int main(int argc, char** argv) {
Mat src, dst;
src = imread("F:/AI Course/openCVTest/images/circle03.png");
if (!src.data) {
cout << "could not load the image..." << endl;
return -1;
}
char input[] = "Input Image";
char output[] = "Hough circle demo";
namedWindow(input, CV_WINDOW_AUTOSIZE);
namedWindow(output, CV_WINDOW_AUTOSIZE);
imshow(input, src);

//中值滤波
Mat midout;
medianBlur(src, midout, 3);
cvtColor(midout, midout, CV_BGR2GRAY);

//霍夫圆检测
vector<Vec3f>pcircle;
HoughCircles(midout, pcircle, CV_HOUGH_GRADIENT, 1, 10, 100, 30, 5, 50);
src.copyTo(dst); //将原图复制到dst图上
for (size_t i = 0; i < pcircle.size(); i++) {
Vec3f cc = pcircle[i];
circle(dst, Point(cc[0], cc[1]), cc[2], Scalar(0, 0, 255), 2, LINE_AA); // 绘制圆
circle(dst, Point(cc[0], cc[1]), 2, Scalar(198, 23, 255), 2, LINE_AA); // 绘制圆心
}
imshow(output, dst);

waitKey(0);
return 0;
}
影醉阏轩窗 2017-08-01
  • 打赏
  • 举报
回复
没有预处理当然不行啊!给你参考:http://www.cnblogs.com/wjy-lulu/p/6677280.html

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧