zoukankan      html  css  js  c++  java
  • opencv3.2 环境下实现 SURF算法:错误调试

    环境:opencv3.2+VS2015   Debug  X64      实现SURF算法

    代码来自网上,并未修改,知识为了将其调通,遇见错误:

    严重性 代码 说明 项目 文件 行 禁止显示状态
    错误 LNK2019 无法解析的外部符号 "public: static struct cv::Ptr<class cv::xfeatures2d::SURF> __cdecl cv::xfeatures2d::SURF::create(double,int,int,bool,bool)" (?create@SURF@xfeatures2d@cv@@SA?AU?$Ptr@VSURF@xfeatures2d@cv@@@3@NHH_N0@Z),该符号在函数 main 中被引用 SURF_Algorithm D:workprojectSURF_AlgorithmSURF_AlgorithmSURF.obj 1

    原因是lib文件没有引入

    opencv_xfeatures2d320d.lib
    opencv_features2d320d.lib

    源码:

     1 #include <opencv2/opencv.hpp>  
     2 #include <opencv2/xfeatures2d.hpp>  
     3 #include <opencv2/xfeatures2d/nonfree.hpp>  
     4 #include <iostream> 
     5 
     6 #include<iostream>
     7 using namespace std;
     8 using namespace cv;
     9 using namespace cv::xfeatures2d;
    10 int main()
    11 {
    12     Mat srcImage1 = imread("D://1.jpg", 1);
    13     Mat srcImage2 = imread("D://1.jpg", 1);
    14     if (!srcImage1.data || !srcImage2.data)
    15     {
    16         cout << "读取图片出错" << endl;
    17         return false;
    18     }
    19 
    20     imshow("原始图1", srcImage1);
    21     imshow("原始图2", srcImage2);
    22 
    23     int minHessian = 100;
    24     Ptr<SurfFeatureDetector> detector = SurfFeatureDetector::create(minHessian);
    25 
    26     vector<cv::KeyPoint> key_points_1, key_points_2;
    27 
    28     Mat dstImage1, dstImage2;
    29     detector->detectAndCompute(srcImage1, Mat(), key_points_1, dstImage1);
    30     detector->detectAndCompute(srcImage2, Mat(), key_points_2, dstImage2);//可以分成detect和compute
    31 
    32     Mat img_keypoints_1, img_keypoints_2;
    33     drawKeypoints(srcImage1, key_points_1, img_keypoints_1, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
    34     drawKeypoints(srcImage2, key_points_2, img_keypoints_2, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
    35 
    36     Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create("FlannBased");
    37     vector<DMatch>mach;
    38 
    39     matcher->match(dstImage1, dstImage2, mach);
    40     double Max_dist = 0;
    41     double Min_dist = 100;
    42     for (int i = 0; i < dstImage1.rows; i++)
    43     {
    44         double dist = mach[i].distance;
    45         if (dist < Min_dist)Min_dist = dist;
    46         if (dist > Max_dist)Max_dist = dist;
    47     }
    48     cout << "最短距离" << Min_dist << endl;
    49     cout << "最长距离" << Max_dist << endl;
    50 
    51     vector<DMatch>goodmaches;
    52     for (int i = 0; i < dstImage1.rows; i++)
    53     {
    54         if (mach[i].distance < 2 * Min_dist)
    55             goodmaches.push_back(mach[i]);
    56     }
    57     Mat img_maches;
    58     drawMatches(srcImage1, key_points_1, srcImage2, key_points_2, goodmaches, img_maches);
    59 
    60     for (int i = 0; i < goodmaches.size(); i++)
    61     {
    62         cout << "符合条件的匹配:" << goodmaches[i].queryIdx << "--" << goodmaches[i].trainIdx << endl;
    63     }
    64     imshow("效果图1", img_keypoints_1);
    65     imshow("效果图2", img_keypoints_2);
    66     imshow("匹配效果", img_maches);
    67 
    68     waitKey(0);
    69     return 0;
    70 }

    效果图

    环境图像:

    opencv文件夹下相关文件的修改:

    以上添加的文件均为cmake后获取得到。

  • 相关阅读:
    基于FFI模块CAPI与JavaScript的各种类型匹配总结
    在Electron中通过ffi模块实现JavaScript调用C++动态库
    谷歌地图OGC WMTS服务规则
    tiff/tfw, jpg/jpgw坐标文件的格式(6个参数)
    GreenDao 多表事务操作
    Asp.net WebAPI 使用流下载文件注意事项
    mvn 用指定setting.xml 执行指定pom.xml
    Swagger自动生成接口文档
    Windows下控制Nginx的状态
    Android 动态权限申请
  • 原文地址:https://www.cnblogs.com/linmengran/p/7928071.html
Copyright © 2011-2022 走看看