【发布时间】:2020-12-24 06:53:09
【问题描述】:
下面是附加图片,我正在尝试检测大圆圈内的小圆圈,并获取它的x 和y 坐标。 到目前为止,我已经尝试使用 HoughCircles、findContours,但我无法获得想要的结果。
谁能建议如何解决这个特殊问题。
已编辑: 这个算法我用过
cv::Mat tmp_mat, grey_mat;
cv::cvtColor(load_image, tmp_mat, cv::COLOR_BGR2GRAY);
cv::GaussianBlur(tmp_mat,grey_mat,cv::Size(7,7),0,0);
cv::imshow("color", grey_mat);
// Step -2
std::vector<std::vector<cv::Point> > contours;
std::vector<cv::Vec4i > hierarchy;
cv::Mat edged;
cv::Canny(grey_mat, edged, 20,140);
cv::findContours(edged, contours, hierarchy,cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
std::cout << "Contour Size: " << contours.size();
虽然代码正在检测大圆圈内的圆圈。问题是如何排除大圆圈之外的圆圈。
【问题讨论】:
-
我建议先对图像设置阈值。然后尝试应用形态学打开然后用小圆形内核关闭以去除小的。如果形态学效果不佳,则获取轮廓并在区域或周长上进行过滤。您可以获得坐标的轮廓的质心。或者你可以做霍夫圆并得到圆的中心。
标签: python c++ opencv image-processing computer-vision