BruteForce Matchが「識別できない識別子」をエラーしました.

4576 ワード


本論文の転送先:http://blog.csdn.net/panda1234lee/article/details/8611363
最近Opencvのアップグレードが速くて、2.4.0から2.4.1まで2.4.2まで、これはまだ2.3.1を使っている人に申し訳ないです.そして、新しいバージョンにtbb並列機能が追加されていると聞きました.これらの機能を利用したいので、急いで2.4.2を降りました.
順番に解圧して、c++カタログを設定して、環境変数を設定します.一連の完成後、surfアルゴリズムを使って、pdfドキュメントのコードをvsにコピーしてみました.実行してみたら、だめでした.エラーが発生しました.瞬間的に騙された感じがします.これは公式発表のpdfから最新コードです.
[cpp]view play copy print?
ヽoo.ツ   
  • 〓〓include 「opencv 2/core/core.hpp」  
  • ヽoo.ツ 「opencv 2/feature s 2 d/feature s 2 d.hpp」  
  • 〓〓include 「opencv 2/highggui/highggui.hpp」  
  • ヽoo.ツ 「opencv 2/nonfree/non free.hpp」  
  • 〓〓include 「opencv 2/nonfree/feature s 2 d.hpp」  
  •    
  • using namespace std;  
  • using namespace cv;  
  • char *path 1=「D:\TestData\cvtest\src\left 01.jpg」  
  • char *path 2=「D:\TestData\cvtest\src\left 03.jpg」  
  •    
  • 要点 main()  
  • {  
  •     Mat src 1=imread(path 1,0)  
  •    
  •     /*namedWindow(「イメージ」、CVUWINDOWAUTOSTIZE); 
  •     imshow(「イメージ」、 src 1) 
  •     waitKey(0);*/  
  •    
  •     Mat src 2=imread(path 2,0)  
  •     Surf Feature Detector detector(400)  
  •     vector keyboot 1,keyboot 2;  
  •     detector.detect(src 1,keyboot 1)  
  •     detector.detect(src 2,keyboot 2);  
  •    
  •     Surf DescriptorExtractor extractor;  
  •     Mat descriptor 1、descriptor 2;  
  •     extractor.co mpute(src 1、keypeot 1、descriptor 1)  
  •     extractor.co mpute(src 2、keypeot 2、descriptor 2)  
  •    
  •     BruteForce Match matcher;  
  •     vectormatches;  
  •     matcher.match(descriptor 1,descriptor 2,matches)  
  •    
  •     namedWindow(「matches」、1)  
  •     Mat imgumatches;  
  •     drawMatch(src 1,keyboot 1,src 2,keyboot 2,matches,imgumatches)  
  •     imshow(「matches」、imgumatches);  
  •     cv WaitKey(0)  
  •     return 0;  
  • }  
  • #include <iostream>
    #include "opencv2/core/core.hpp"
    #include "opencv2/features2d/features2d.hpp"
    #include "opencv2/highgui/highgui.hpp"
    #include "opencv2/nonfree/nonfree.hpp"
    #include "opencv2/nonfree/features2d.hpp"
     
    using namespace std;
    using namespace cv;
    char *path1="D:\\TestData\\cvtest\\src\\left01.jpg";
    char *path2="D:\\TestData\\cvtest\\src\\left03.jpg";
     
    int main()
    {
        Mat src1=imread(path1,0);
     
        /*namedWindow("image",CV_WINDOW_AUTOSIZE);
        imshow("image", src1);
        waitKey(0);*/
     
        Mat src2=imread(path2,0);
        SurfFeatureDetector detector(400);
        vector<KeyPoint> keypoint1,keypoint2;
        detector.detect(src1,keypoint1);
        detector.detect(src2,keypoint2);
     
        SurfDescriptorExtractor extractor;
        Mat descriptor1,descriptor2;
        extractor.compute(src1,keypoint1,descriptor1);
        extractor.compute(src2,keypoint2,descriptor2);
     
        BruteForceMatcher<L2<float>> matcher;
        vector<DMatch>matches;
        matcher.match(descriptor1,descriptor2,matches);
     
        namedWindow("matches",1);
        Mat img_matches;
        drawMatches(src1,keypoint1,src2,keypoint2,matches,img_matches);
        imshow("matches",img_matches);
        cvWaitKey(0);
        return 0;
    }
    群の中で聞いてみたら、みんなも2.4.2を使ったばかりで、頭のファイルの問題だと教えてくれたのは達人だけです.探してみましたが、2.3.1のincludeファイルと2.4.2の違いがとても大きいです.新しいバージョンには多くのものがあります.feature s 2 d.hppというファイルを比べてみたら、feature s 2 d.hppに含まれていたBruteForce Matchがfeature 2 d.hppの中にはありません.他のファイルを探してみました.これは問題を解決する方法ではないと発見しました.googleに聞いてください.検索してみると、本当にこの問題に遭遇した人がいます.確かに頭のファイルの問題です.「菗include」が足りなくなりました.加えて、以前の間違いは確かになくなりました.
    しかし、新たな問題が出てきました.linkに問題があると言っています.未経験の私はgoogle(Googleは強いですよね!!!)を聞くしかないです.牛人はずばりと急所を突いて問題点を指摘しました.For those who would have the same proble、make sure you have ALL the right linker inputs.highgguietc.右ボタン「プロパティ」->「リンク」-「入力」->「依存関係を追加」で入力したlegacyの静的ファイルをオープンします.legacy 242 d.libを入れたらokです.
    発生した問題と解決:1、大量の.dllファイル(msvcr 100 d.dllなど)はロードされていません.これはいくつかの関連があるかもしれません.dllファイルのパスはPATHに参加していません.場所を見つけたらPATHに参加します.またはプロジェクトのデバッグオプションの中でソースサーバに対するサポートを設定します.2、参考http://www.cnblogs.com/ll2008swu/archive/2012/07/23/2605639.html 2次元の特徴抽出をする時、Surf Feature Detectorはopencv 2/feature s 2 d/feature s 2 d.hppにいないことが分かりました. opencv 2/nonfree/feature s 2 d.hpp Brute Force Matchで opencv 2/nonfree/feature s 2 d.hppに参加したいですが、上記のファイルを含めて最終的にopencv 2/legacy/legacy.hpp/同時に正常linkとして、Linkerの下に-lopencvを追加します.non free 240(そうでなければ、error LNK 2019:解析不能な外部シンボルの問題が生じる).
    VCを使う人はバージョンによってopencv_を作ります.nonfree 242 d.libの位置はLinker経路設定に参加すれば、スムーズに実行できます.