我遇到了一个问题:cv :: FlannBasedMatcher更精确地讲,使用knnMatch方法。我的程序将IplImage *和IplImage *作为输入,然后检测出一张脸,然后将其切开,并将建立的脸与存储在计算机中的图像进行比较。如果我的匹配度超过10,它将在标准输出Match中写入。
加载的图像不是灰度图像。那重要吗?
我的问题是,它可以正常工作,但随机时间为1分钟到3分钟或更多或更少。
错误消息始终显示在knnMatch方法上。它们在这里(请注意,每次只有一个):
OpenCV Error: Assertion failed ((globalDescIdx>=0) && (globalDescIdx < size())) in getLocalIdx, file /opt/local/var/macports/build/_opt_mports_dports_graphics_opencv/opencv/work/opencv- 2.4.9/modules/features2d/src/matchers.cpp, line 163
libc++abi.dylib: terminating with uncaught exception of type cv::Exception: /opt/local/var/macports/build/_opt_mports_dports_graphics_opencv/opencv/work/opencv-2.4.9/modules/features2d/src/matchers.cpp:163: error: (-215) (globalDescIdx>=0) && (globalDescIdx < size()) in function getLocalIdx
Run Code Online (Sandbox Code Playgroud)
我不明白为什么会抛出此异常...
这是我的代码:
int DroneCV::matchFaces()
{
std::vector<cv::KeyPoint> keypointsO;
std::vector<cv::KeyPoint> keypointsS;
cv::Mat descriptors_object, descriptors_scene;
cv::Mat foundFaces(this->_faceCut);
cv::FlannBasedMatcher matcher;
std::vector<std::vector<cv::DMatch>> matches;
std::vector<cv::DMatch> good_matches;
cv::SurfDescriptorExtractor extractor;
cv::SurfFeatureDetector surf(this->_minHessian);
surf.detect(foundFaces,keypointsS);
surf.detect(this->_faceToRecognize,keypointsO);
if (!this->_faceToRecognize.data || !foundFaces.data)
{
this->log("Fail to init data in DronceCV::matchFaces"); …Run Code Online (Sandbox Code Playgroud)