1

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

4

1 に答える 1

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);

OpenCV2.4.1で問題なく使用できます。

コードをデバッグして、アサーションが正確にどこで失敗するかを確認しましたか?

于 2012-08-30T17:19:19.070 に答える