OpenCV DescriptorExtractor返回空

时间:2014-09-24 17:51:42

标签: ios opencv object-detection orb

我正在尝试使用iOS上的OpenCV进行对象检测。我正在使用this code sample from the documentation

这是我的代码:

Mat src = imread("src.jpg");
Mat templ = imread("logo.jpg");

Mat src_gray;
cvtColor(src, src_gray, CV_BGR2GRAY);

Mat templ_gray;
cvtColor(templ, templ_gray, CV_BGR2GRAY);

int minHessian = 500;

OrbFeatureDetector detector(minHessian);

std::vector<KeyPoint> keypoints_1, keypoints_2;

detector.detect(src_gray, keypoints_1);
detector.detect(templ_gray, keypoints_2);

OrbDescriptorExtractor extractor;

Mat descriptors_1, descriptors_2;

extractor.compute(src_gray, keypoints_1, descriptors_1);
extractor.compute(templ_gray, keypoints_2, descriptors_2);

问题出在extractor.compute(src_gray, keypoints_1, descriptors_1);行,descriptors_1始终为空。

srctempl不为空。

有什么想法吗?

由于

1 个答案:

答案 0 :(得分:0)

首先,我认为如果你想使用特征检测器和描述符,你必须告诉自己它们是如何工作的。 你可以看到这个话题,'佩内洛普'的答案解释了一切比我能做的更好: https://dsp.stackexchange.com/questions/10423/why-do-we-use-keypoint-descriptors

在第一步之后,我认为您应该更好地了解ORB检测器/描述符的工作原理(如果您真的想要使用它),它的参数是什么等等。为此,您可以查看opencv文档和ORB文件:

http://docs.opencv.org/modules/features2d/doc/feature_detection_and_description.html https://www.willowgarage.com/sites/default/files/orb_final.pdf

我这样说是因为当'minHessian'实际上是来自SURF检测器的参数时,你在ORB检测器上设置'minHessian'参数。

无论如何,你的代码问题不是那个。尝试加载您的图像,如您所关注的示例:

Mat src = imread("src.jpg", CV_LOAD_IMAGE_GRAYSCALE);
Mat templ = imread("logo.jpg", CV_LOAD_IMAGE_GRAYSCALE );

然后检测关键点:

detector.detect(src, keypoints_1);
detector.detect(templ, keypoints_2);

现在检查keypoints_1和keypoints_2是否为空。如果他们去提取描述符!它应该工作

希望这有帮助