我最近在opencv的ORB描述符中发现了一些非常奇怪的行为。
cv::Mat grey; //greyscale image
std::vector<cv::KeyPoint> keypoints;
cv::Mat descriptors;
cv::ORB detector;
detector(grey,cv::Mat(),keypoints,descriptors);
如果给出的图像没有包含潜在关键点(例如黑色图像)且错误
,则上述代码会一直崩溃OpenCV Error: Assertion failed (m.dims >= 2) in Mat, file /Users/user/slave/ios_framework/src/opencv/modules/core/src/matrix.cpp, line 268
我发现要解决问题,我可以执行以下操作
cv::Mat grey;
std::vector<cv::KeyPoint> keypoints;
cv::Mat descriptors;
cv::ORB detector;
detector(grey,cv::Mat(),keypoints);
if(keypoints.size() > 0)
{
detector(grey,cv::Mat(),keypoints,descriptors,true);
}
首先检测关键点,然后在检测到任何关键点时生成描述符。我在iOS上使用opencv2作为.framework。
这是OpenCV中的错误吗?如果没有,我做错了什么?如果是这样,是否有任何修复版本?
答案 0 :(得分:3)
我刚刚运行了这段代码
cv::Mat grey = cv::Mat::zeros(100, 100, CV_8UC1);
std::vector<cv::KeyPoint> keypoints;
cv::Mat descriptors;
cv::ORB detector;
detector(grey,cv::Mat(),keypoints,descriptors);
使用OpenCV 2.4.1没有问题。
您是否调试了代码以查看断言的确切位置?