10

サンプルfind_obj.cppまたはOpenCVSURFプログラムを実行しようとすると、コードの実行中にコマンドプロンプトで次のエラーが発生します。プロジェクトはエラーや警告なしでビルドされます。VS2011ベータ版、OpenCV 2.4、Windows7を使用しています。

エラーメッセージ:

OpenCV Error: The function/feature is not implemented < OpenCV was built without SURF support> in unknown function,file ..\..\..\src\opencv\modules\legacy\src\features2d.cpp, line 77

Cmakeを使用してOpenCV2.4を再度ビルドし、次にデバッグモードでVS2011をビルドしてから、IDEにlibパスを追加しようとしましたが、それでも結果が得られませんでした。

どうすれば修正できますか?

    #include <opencv2/objdetect/objdetect.hpp>
    #include <opencv2/features2d/features2d.hpp>
    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/legacy/legacy.hpp>
    #include <opencv2/legacy/compat.hpp>
    #include <opencv2/flann/flann.hpp>
    #include <opencv2/calib3d/calib3d.hpp>
    #include <opencv2/nonfree/features2d.hpp>
    #include <opencv2/nonfree/nonfree.hpp>

using namespace std;
using namespace cv;
int main()
{
    cv::initModule_nonfree();//THIS LINE IS IMPORTANT   

   IplImage *image1 = cvLoadImage("C:\\SURF\\1.jpg"); 
    IplImage *image2 = cvLoadImage("C:\\SURF\\2.jpg");

    CvMemStorage* memoryBlock = cvCreateMemStorage();
    CvSeq* image1KeyPoints;
    CvSeq* image1Descriptors;
    CvSeq* image2KeyPoints;
    CvSeq* image2Descriptors;

    // Only values with a hessian greater than 500 are considered for keypoints
   CvSURFParams params = cvSURFParams(500, 1);
   cvExtractSURF(image1, 0, &image1KeyPoints, &image1Descriptors, memoryBlock, params);
   cvExtractSURF(image2, 0, &image2KeyPoints, &image2Descriptors, memoryBlock, params);

   return 0;
}
4

4 に答える 4

10

この回答から取得しました(質問する前に質問をグーグルで検索してみませんか?):

SIFT および SURF コードは、OpenCV v2.4 で という新しいモジュールに移動されました nonfree。(WindowsのDLL)にリンクしていることを確認してください。Linux では、このライブラリはlibopencv_nonfree.so.

于 2012-06-24T09:03:10.020 に答える
3

最近、SURFを習っています。この質問では、opencv_nonfree240d.lib と opencv_nonfree240.lib をプロジェクトの lib パスに追加できます。

于 2012-10-15T02:15:45.123 に答える
0

ubuntu の場合、 https: //help.ubuntu.com/community/OpenCV のスクリプトを 変更して、無料ではない surf/sift 用に追加することができます。

libopencv_nonfree

sudo apt-get コマンドの最後まで、および

-D BUILD_opencv_nonfree=ON

cmakeコマンドの最後まで。ソフトウェアセンターからopencvを扱うことができるものをすべてアンインストールした後にのみ機能しました。ちなみに、ソフトウェア センターには opencv の不自由なライブラリ「libopencv-nonfree2.4」もありましたが、これは役に立たないようでした。私はそのようなことの専門家ではないので、私がしたことが100%正しいかどうかはわかりませんが、次のようなコマンドが可能です

サーフ = cv2.SURF(400)

キーポイント = surfDetector.detect(im)

以前は実行しなかったものを実行します (最初のエラーは「見つかりません」タイプのエラーを引き起こし、2 番目のエラーはセグメンテーション違反を引き起こしました)。

nonfree surf/sift を使用できるようにした opencv.sh のバージョンを http://pastebin.com/sQzDdx5i に貼り付けまし た
ライブラリ名と同様に、ある程度不可知論的です。

于 2014-08-06T17:17:46.867 に答える