opencv 3, blobdetection,函数/特性在detectAndCompute中没有实现()



我有一个问题与opencv 3:我想使用一个特征检测器,SimpleBlobDetector,关于使用凸度和圆度过滤器。但是当我尝试执行代码时,会跟踪以下错误:

函数/特性未在detectAndCompute

中实现()

应用程序崩溃。

我在网上搜索信息,没有任何相关的答案。我认为Opencv的第三版可能对这个bug负责,因为我知道我使用检测器的好方法(我尝试完全像官方的Opencv教程),我注意到SimpleBlobDector已被修改为第三版。

使用断点,我知道以下行会崩溃:

detector.detect(灰色,要点);

SimpleBlobDetector已经创建(使用create函数)并配置,灰色图像不是空的,关键点矢量在检测之前不需要填充。

我使用opencv 3.0.0,用QtCreator在MinGW中编译。opencv处理不是从主线程启动的。

还有其他人有同样的问题吗?如果我能有一个补丁或使用另一个类的另一个解决方案,我会很感激。我真的需要使用凸性来过滤我的blobs和我发现的其他检测器(FeatureDetector或Brisk)不能配置,只返回关键点,它没有计算凸性的面积或丰满参数。

Thanks in advance

这看起来是解决了,但也许它帮助别人。我也有同样的问题。我创建了blob检测器,如下所示:

cv::SimpleBlobDetector detector;
detector.create(params);
detector.detect( img, keypoints );

结果是错误:The function/feature is not implemented () in detectAndCompute .

但是当我这样尝试的时候:

cv::Ptr<cv::SimpleBlobDetector> detector = cv::SimpleBlobDetector::create(params); 
detector->detect( img, keypoints );

现在一切正常。

真的很奇怪,如果有人知道为什么会这样,请告诉我。

这是因为您使用的是OpenCV 3。其中(在撰写本文时)您可以在网上找到的所有示例都使用OpenCV 2.X。

如果你翻一翻,你会发现这个过渡指南:http://docs.opencv.org/master/db/dfa/tutorial_transition_guide.html tutorial_transition_hints_headers

说明你需要使用:

Ptr<SomeAlgo> algo = makePtr<SomeAlgo>(...);
Ptr<SomeAlgo> algo = SomeAlgo::create(...);

代替:

SomeAlgo algo(); // bad

在这种情况下,你需要使用:

Ptr<SimpleBlobDetector> d = SimpleBlobDetector::create();

或:

Ptr<SimpleBlobDetector> d = SimpleBlobDetector::create(params);

如果你有参数

感谢您的回复。

我使用detect(就像我在之前的消息中所说的)。我认为检测函数可能使用了detectAndCompute。

缺少描述符确实可能是问题所在,因为我已经在Emgu (c#版本的opencv)中遇到了类似的问题,直到我发现一个开发人员的说明,说该方法尚未纠正,描述符是原因。

对于其他有同样问题的人,我最终使用cv::findContours而不是blob检测器。它工作起来好多了,没有任何问题。要替换凸性检测,您可以使用填充(形状区域/边界框区域)对其进行评估。要替换圆形,请使用以下公式:

圆面积/边框面积= PI/4

只使用detect(…)而不是detectAndCompute(…)。没有为blob检测定义的特征描述符。

看这里:https://stackoverflow.com/a/11079868/1611317

相关内容

  • 没有找到相关文章

最新更新