Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用于圆检测的二维点云形状轮廓_C++_Opencv_Ros - Fatal编程技术网

C++ 用于圆检测的二维点云形状轮廓

C++ 用于圆检测的二维点云形状轮廓,c++,opencv,ros,C++,Opencv,Ros,我有一个LRF,它返回一个2D点云,我需要用它来检测一个圆(在任何时间点上,只有一个半圆是可见的)。在Canny和GaussianBlur返回一个圆后使用OpenCV中的HoughCircles,但即使玩了几个小时的值,它仍然返回误报。下面是检测圆的代码部分图像基本上是从LRF输入创建的Mat类型的图像 cv::Mat destination; cv::Canny(image, destination, 200, 20); cv::GaussianBlur(destination, destin

我有一个LRF,它返回一个2D点云,我需要用它来检测一个圆(在任何时间点上,只有一个半圆是可见的)。在Canny和GaussianBlur返回一个圆后使用OpenCV中的HoughCircles,但即使玩了几个小时的值,它仍然返回误报。下面是检测圆的代码部分<代码>图像基本上是从LRF输入创建的
Mat
类型的图像

cv::Mat destination;
cv::Canny(image, destination, 200, 20);
cv::GaussianBlur(destination, destination, Size(7, 7), 2, 2 );
vector<Vec3f> circles;
cv::HoughCircles(destination, circles, CV_HOUGH_GRADIENT, 1, 100, 200, 15, 10, 20);
cv::Mat目的地;
cv::Canny(图像,目的地,200,20);
cv::GaussianBlur(目的地,目的地,大小(7,7,2,2));
矢量圆;
cv::HoughCircles(目的地、圆、cv_-HOUGH_梯度、1100、200、15、10、20);
可以假设点云中只有一个真实的圆。在大多数情况下,它工作正常 但是,像这样的假阳性时有发生

到目前为止,我通过将HoughCircles的Minist参数增加到大于图像大小,成功地将任意点的圆圈数减少到1,但这仍然会导致误报,因为它无法检测到实际的圆圈。我认为这些误报源于LRF输入中的噪声。有没有办法将此点云图像转换为具有线条而不是点的图像?所以如果在应该有直线的地方检测到一个圆,我知道这是一个假阳性。或者也许有人有一个更好的方法,我一直在错过


欢迎任何输入。

您可以尝试将其转换为二值图像,阈值接近黑色。让我们假设将每个>50或更低的像素转换为白色。这有助于消除噪音。不幸的是,根据我的经验,这个算法从来都不是100%可靠的,尤其是在阈值太低的情况下,你使用。@j.kaspar。图像已经是黑白的,带有W背景和B点。该图像是通过用黑色写入单个位生成的。