最近、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の.frameworkとしてopencv2を使用しています。
これはOpenCVのバグですか?そうでない場合、私は何を間違っていますか?もしそうなら、それが修正されているバージョンはありますか?