当前位置: 代码迷 >> 综合 >> Opencv4.2.1+Opencv_contrib+vs2017+Win10编译
  详细解决方案

Opencv4.2.1+Opencv_contrib+vs2017+Win10编译

热度:47   发布时间:2024-01-14 23:22:15.0

Opencv4.2.1+vs2017+Win10编译

  • 软件准备
  • cmake编译
  • 环境设置
  • 实验一下

软件准备

准备好vs2017 community, 社区版免费。
下载opencv4.2.1, 到opencv网站下载,免费。
下载opencv_contrib 4.2.1,到github下载,注意版本号,tag。
安装cmake最新版 我的是3.16.1.

cmake编译

源码解压缩 到文件夹下。
把cmakelist拖到cmake gui中,设置编译目录。

选择vs2017、 x64.

按configuration,
设置勾选build_opencv_world, 这样编译出来就只有一个lib文件了,不用一个一个添加了,后果就是有点大,4.16M。
设置OPENCV 选项中的opencv_extra_modules_path, 选择opencv_contrib的路径
“**/opencv_contrib4.2.1/modules”,这样就可以编译扩展库了,内容很丰富哟。
还有勾选OPNENCV选项中的opencv_enable_nonfree, 因为contrib库中的sift 和surf有专利保护,必须勾选这个才能编译这几个库,xfeatures2d, ximgproc, xphoto, xobjdetect.

按configuration,一直到红色消失位置。
如果下载不了的库,ippcv ffmpeg等 那就翻墙。
不能翻墙的话,就修改一下对应库的cmake文件,修改一下下载地址,
参考一下https://blog.csdn.net/YMilton/article/details/102898814,试过了很好用。

按generate。
按openproject。
在vs2017中按build->batch build
勾选build all debug release x64, install debug release, 开始build。
剩下的就是等待了,一觉醒来应该就能编译完。

环境设置

这方面的教程很多呀。
设置bin path,
include path,
lib path,
添加lib
参考https://blog.csdn.net/YMilton/article/details/102898814

实验一下

#include "pch.h"
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/xfeatures2d.hpp>
using namespace std;
using namespace cv;
using namespace xfeatures2d;int main(int argc, char** argv)
{
    Mat box = imread("left01.jpg");Mat box_in_sence = imread("right01.jpg");// 创建SIFT对象Ptr<xfeatures2d::SIFT> detector = xfeatures2d::SIFT::create();vector<KeyPoint> kpts_01, kpts_02;Mat descriptors1, descriptors2;detector->detectAndCompute(box, cv::Mat(), kpts_01, descriptors1);detector->detectAndCompute(box_in_sence, cv::Mat(), kpts_02, descriptors2);// 定义描述子匹配 - 暴力匹配Ptr<cv::DescriptorMatcher> matcher = DescriptorMatcher::create(cv::DescriptorMatcher::BRUTEFORCE);std::vector< cv::DMatch > matches;matcher->match(descriptors1, descriptors2, matches);// 绘制匹配cv::Mat img_matches;cv::drawMatches(box, kpts_01, box_in_sence, kpts_02, matches, img_matches);cv::imshow("Matches", img_matches);cv::imwrite("result.png", img_matches);cv::waitKey(0);return 0;
}

结果很可以。除了有点乱之外。

除了有点乱

  相关解决方案