window10下面vs2022多个opencv共存的配置过程,以及问题解决。

问题记录,在使用vs的时候,opencv环境配置成功后,遇到问题解决方案。

环境:window 10 + opencv2.4.13 + vs2022

注意:我是在电脑上已经存在opencv4.5.5的情况下,继续配置其他版本的opencv

环境配置过程:

配置的步骤如下:

  • 1)opencv官网下载opencv2.4.13,并解压到指定目录。本文解压目录为D:\opencv2.4.13
  • 2)配置电脑环境变量:电脑-->右键“属性”-->左侧导航栏“高级适配器配置”-->"高级“-->"环境变量”-->"系统变量“-->双击"Path"-->添加下列路径

D:\opencv2.4.13\opencv\build\x64\vc12\bin

  • 3)VS2022中新建一个项目
  • 4) 先将x86改为x64,再进行下一步

  •  5) 右键-》项目名字-》属性(最后一行)

 

  •  6)进入属性界面,选择“VC++ 目录"-->"包含目录"-->添加以下三个目录

  • 7)在VC++目录下设置库目录

  • 8)添加附加依赖项 连接器-》输入-》添加依赖项
  • OpenCV2.4.13配置的lib库

  •  debug模式,添加以下库:
opencv_calib3d2413d.lib 
opencv_contrib2413d.lib 
opencv_core2413d.lib 
opencv_features2d2413d.lib 
opencv_flann2413d.lib 
opencv_gpu2413d.lib 
opencv_highgui2413d.lib 
opencv_imgproc2413d.lib 
opencv_legacy2413d.lib 
opencv_ml2413d.lib 
opencv_nonfree2413d.lib 
opencv_objdetect2413d.lib 
opencv_ocl2413d.lib 
opencv_photo2413d.lib 
opencv_stitching2413d.lib 
opencv_superres2413d.lib 
opencv_ts2413d.lib 
opencv_video2413d.lib 
opencv_videostab2413d.lib
  •  release模式,添加以下库:
opencv_calib3d2413.lib 
opencv_contrib2413.lib 
opencv_core2413.lib 
opencv_features2d2413.lib 
opencv_flann2413.lib 
opencv_gpu2413.lib 
opencv_highgui2413.lib 
opencv_imgproc2413.lib 
opencv_legacy2413.lib 
opencv_ml2413.lib 
opencv_nonfree2413.lib 
opencv_objdetect2413.lib 
opencv_ocl2413.lib 
opencv_photo2413.lib 
opencv_stitching2413.lib 
opencv_superres2413.lib 
opencv_ts2413.lib 
opencv_video2413.lib 
opencv_videostab2413.lib
  • 9)先点应用-->确定,否则白费!!!
  •  10)保存属性表,见下面链接:

VS配置属性表,保存Opencv配置信息_龙龙就是龙龙的博客-CSDN博客_opencv属性表 


 以上是opencv的配置过程。

问题1:

vs找不到msvcp120d .dll,无法继续执行代码。重新安装可能会解决此问题。

网上找了很多个解决方式,都没成功,终于在这边博主中博文中,解决了此问题:

压缩包 链接:https://pan.baidu.com/s/1VcYtdr2p87FInO61i-55yA 
提取码:jtkw 

环境:win10 vs2015 c++ opencv3.4.0

截图:

 

解决方式(不要怀疑下面写错了,是正确的): 

第一步: 下载压缩包,并解压;

第二步: 32位的msvcp120d 和msvcr120d放到了C:\Windows\SysWOW64,

第三步: 64位的msvcp120d 和msvcr120d放到了C:\Windows\System32。

重新启动成功!

vs找不到msvcp120d .dll,无法继续执行代码。重新安装可能会解决此问题。_猫爪子挠的博客-CSDN博客

 配置完环境之后,运行我需要的代码:

/************************************************************************
* Brief: FAST特征点提取以及FREAK描述子的图像匹配,基于OpenCV2.4.8
************************************************************************/
#include <opencv2/core/core.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/nonfree/features2d.hpp>
#include <opencv2/features2d.hpp>
#include <opencv2/legacy/legacy.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <iostream>
#include <vector>

using namespace std;
using namespace cv;

int main()
{
    Mat img1_src = imread("C:/Users/820PC2/Desktop/img1.png", 0);
    Mat img2_src = imread("C:/Users/820PC2/Desktop/img2.png", 0);
    //FastFeatureDetector fast(40);
    
    SurfFeatureDetector fast(2000, 4);
    FREAK extractor;
    vector<KeyPoint> keypoints1, keypoints2;
    Mat descriptor1, descriptor2;
    vector<DMatch> final_matches;
    vector<DMatch> matches;

    double t = (double)getTickCount();
    fast.detect(img1_src, keypoints1);
    fast.detect(img2_src, keypoints2);
    //drawKeypoints(img1_src,keypoints1,img1_src,Scalar(0,255,0));
    //drawKeypoints(img2_src,keypoints2,img2_src,Scalar(0,255,0));
    extractor.compute(img1_src, keypoints1, descriptor1);
    extractor.compute(img2_src, keypoints2, descriptor2);
    BFMatcher matcher(NORM_HAMMING, true);//暴力匹配,并且进行crosscheck,就是说第二个参数选择true。
    matcher.match(descriptor1, descriptor2, matches);
    final_matches = matches;
    cout << "number of total_matches : " << final_matches.size() << endl;

    //接下来是RANSAC剔除误匹配
    vector<Point2f> querymatches, trainmatches;
    vector<KeyPoint> p1, p2;
    for (int i = 0; i < final_matches.size(); i++)
    {
        p1.push_back(keypoints1[final_matches[i].queryIdx]);
        p2.push_back(keypoints2[final_matches[i].trainIdx]);
    }
    for (int i = 0; i < p1.size(); i++)
    {
        querymatches.push_back(p1[i].pt);
        trainmatches.push_back(p2[i].pt);
    }
    cout << querymatches[1] << " and " << trainmatches[1] << endl;
    vector<uchar> status;
    Mat h = findHomography(querymatches, trainmatches, status, CV_FM_RANSAC, 10);
    int index = 0;
    vector<DMatch> super_final_matches;
    for (int i = 0; i < final_matches.size(); i++)
    {
        cout << status[i];
            if (status[i] != 0)
            {
                super_final_matches.push_back(final_matches[i]);
                index++;
            }
    }
    cout << "number of inlier_matches : " << index << endl;

    Mat imgMatch;
    drawMatches(img1_src, keypoints1, img2_src, keypoints2, super_final_matches, imgMatch);
    imshow("imgMatch", imgMatch);

    t = ((double)getTickCount() - t) / getTickFrequency();
    cout << " total time [s] : " << t << endl;
    waitKey(0);
    cout << "结束" << endl;
    return 0;
}

 FAST特征点提取以及FREAK描述子的图像匹配:可以比较友好的提取图像中的敏感区域。

猜你喜欢

转载自blog.csdn.net/qq_44808827/article/details/126328581
今日推荐