opencv_contrib安装笔记
文章目录
- 一、下载与安装
- 二、编译 opencv
- 三、编译 opencv_contrib
- 四、 visual studio 编译
- 五、配置 opencv 环境
- 配置系统环境变量
- 重新配置项目环境
- 六、测试
近来由于需要用到 opencv 的SIFT特征,但是SIFT等功能已经移入了opencv_contrib 中,所以需要重新编译opencv和opencv_contrib。
一、下载与安装
- 下载特定版本的 opencv和opencv_contrib,两者版本要一致。但是由于国内下载GitHub 有时候会非常慢,所以可以下载码云上面的库(opencv码云库和opencv_contrib码云库)。
下载 CMake(https://cmake.org/download/) - 下载并安装 visual studio ,安装时添加
使用C++的桌面开发
。
- 安装 CMake ,用CMake编译opencv和opencv_contrib
opencv 的 Windows安装包实质上是一个自解压文件,双击解压即可。
二、编译 opencv
注意 source code 里面指向的不是opencv的解压目录而是里面的source目录。
如图所示, source 文件夹下面有一个CMakeList.txt文件,如果路径错误,就会报CMake Error: The source directory "/opencv" does not appear to contain CMakeLists.txt.
错误。
build 目录为自己建立的空目录
点击“ config ”
如下,看到自己安装的 visual studio 版本,点击finish。
开始编译,等待。
运气不好的话下方出现红色字体,就是有错误出现。如下图所示,是一些文件下载失败
IPPICV: Download failed: 28;"Timeout was reached"
FFMPEG: Download failed: 6;"Couldn't resolve host name"
FFMPEG: Download failed: 6;"Couldn't resolve host name"
FFMPEG: Download failed: 6;"Couldn't resolve host name"
打开日志文件,使用里面的地址从浏览器里面下载文件。
文件下载之后,放置在文件相应位置,并修改文件名。
可以看到原本路径下文件下载失败,所以是 0KB ,所以需要手动下载下来进行替换。
替换之后:
由于这几个文件可能下载起来比较慢,这里提供网盘链接:
ippicv_2019 链接: https://pan.baidu.com/s/1E5hY2gh-rZgHX2QM-VR8Rw 提取码: qs2w
ippicv_2017 链接: https://pan.baidu.com/s/1enrzXCm_BCgSOw-vnMJMpg 提取码:dsit
opencv_ffmpeg.dll 链接: https://pan.baidu.com/s/1qa4maq1mBKlCLJCTSRZ4PA 提取码:cdes
opencv_ffmpeg_64.dll 链接: https://pan.baidu.com/s/1WaL0h8NhmA2yW941-00_OQ 提取码:ryhy
当 CMake 界面上下两块都没有红色部分,且下方出现了Configuring done
,点击generate按钮
直到下方出现
Configuring done Generating done
此时说明 opencv 基本库编译完成。
如果按照默认编译过程,编译出的opencv文件夹会过大,可能接近26G,我们可以选择一些部分不需要config,包含:BUILD_DOCS
、BUILD_EXAMPLES
、BUILD_PACKAGE
、BUILD_TESTS
、BUILD_PERF_TESTS
、BUILD_opencv_python
。(相关的一些说明)
方法是在 search 对话框中输入以上名称,然后取消这些的选中。
三、编译 opencv_contrib
在 search 对话框中输入OPENCV_EXTRA_MODULES_PATH
,找到OPENCV_EXTRA_MODULES_PATH后在value中填入编译opencv_contrib解压目录中的modules路径(注意此处路径的反斜杠\要改成正斜杠/,反斜杠\有转义字符的意思)。目录错误则会出现Error in configuration process, project files may be invalid
弹窗错误提醒。
以下为路径错误时的弹窗:
在搜索栏中输入 OPENCV_ENABLE_NONFREE
,在value值中点击选中。如果没有选中,那么类似SIFT这种已经被申请专利的方法就无法使用。
然后点击 configure
在下方出现 Configuring done
之后,点击Generate
和 opencv 基本库编译一样,CMake下方出现Configuring done Generating done
,说明opencv_contrib 编译完成。
四、 visual studio 编译
然后点击 Open Project
,会使用之前选择的特定版本visual studio打开。
选择 生成
->批生成
在弹出的窗口里面选择的 debug 和release的ALL_BUILD和INATALL,然后点击“生成”。
该过程会需要较长时间。
五、配置 opencv 环境
配置系统环境变量
生成结束之后,需要修改环境变量。
环境变量在“此电脑”->“属性”->“高级系统设置”->“环境变量”,在用户变量里面的 Path 变量后面添加之前CMake设置的build目录\install\x64\vc16\bin
,确定,退出。
如果 visual studio 在修改环境变量之前就打开了,需要重启visual studio
重新配置项目环境
visual studio 中右击项目->“属性”,
首先可以选择“所有配置” “所有平台”,编辑包含目录和库目录
包含目录编辑为
生成的 build 目录\install\include
生成的 build 目录\install\include\opencv2
库目录编辑为:
生成的 build 目录\install\x64\vc16\lib
编辑包含目录和库目录之后,需要添加附加依赖项,此时需要分别针对 debug 和release两种模式添加。
打开 生成的build目录\install\x64\vc16\lib
可以发现每个lib文件都有两种,一种是以d.lib
结尾,另一种只比前一种少了一个d,只以.lib
结尾。debug模式需要d.lib
结尾文件,release模式需要.lib
结尾文件,任何一种模式配置错误,就不能以该模式运行opencv。
所以需要在编辑附加依赖项时添加各自需要的文件名。
可以通过命令行整理,也可以用下面的:
debug 模式:
opencv_aruco410d.lib
opencv_bgsegm410d.lib
opencv_bioinspired410d.lib
opencv_calib3d410d.lib
opencv_ccalib410d.lib
opencv_core410d.lib
opencv_datasets410d.lib
opencv_dnn410d.lib
opencv_dnn_objdetect410d.lib
opencv_dpm410d.lib
opencv_face410d.lib
opencv_features2d410d.lib
opencv_flann410d.lib
opencv_fuzzy410d.lib
opencv_gapi410d.lib
opencv_hfs410d.lib
opencv_highgui410d.lib
opencv_imgcodecs410d.lib
opencv_imgproc410d.lib
opencv_img_hash410d.lib
opencv_line_descriptor410d.lib
opencv_ml410d.lib
opencv_objdetect410d.lib
opencv_optflow410d.lib
opencv_phase_unwrapping410d.lib
opencv_photo410d.lib
opencv_plot410d.lib
opencv_quality410d.lib
opencv_reg410d.lib
opencv_rgbd410d.lib
opencv_saliency410d.lib
opencv_shape410d.lib
opencv_stereo410d.lib
opencv_stitching410d.lib
opencv_structured_light410d.lib
opencv_superres410d.lib
opencv_surface_matching410d.lib
opencv_text410d.lib
opencv_tracking410d.lib
opencv_video410d.lib
opencv_videoio410d.lib
opencv_videostab410d.lib
opencv_xfeatures2d410d.lib
opencv_ximgproc410d.lib
opencv_xobjdetect410d.lib
opencv_xphoto410d.lib
release 模式:
opencv_aruco410.lib
opencv_bgsegm410.lib
opencv_bioinspired410.lib
opencv_calib3d410.lib
opencv_ccalib410.lib
opencv_core410.lib
opencv_datasets410.lib
opencv_dnn410.lib
opencv_dnn_objdetect410.lib
opencv_dpm410.lib
opencv_face410.lib
opencv_features2d410.lib
opencv_flann410.lib
opencv_fuzzy410.lib
opencv_gapi410.lib
opencv_hfs410.lib
opencv_highgui410.lib
opencv_imgcodecs410.lib
opencv_imgproc410.lib
opencv_img_hash410.lib
opencv_line_descriptor410.lib
opencv_ml410.lib
opencv_objdetect410.lib
opencv_optflow410.lib
opencv_phase_unwrapping410.lib
opencv_photo410.lib
opencv_plot410.lib
opencv_quality410.lib
opencv_reg410.lib
opencv_rgbd410.lib
opencv_saliency410.lib
opencv_shape410.lib
opencv_stereo410.lib
opencv_stitching410.lib
opencv_structured_light410.lib
opencv_superres410.lib
opencv_surface_matching410.lib
opencv_text410.lib
opencv_tracking410.lib
opencv_video410.lib
opencv_videoio410.lib
opencv_videostab410.lib
opencv_xfeatures2d410.lib
opencv_ximgproc410.lib
opencv_xobjdetect410.lib
opencv_xphoto410.lib
六、测试
配置完成之后使用以下代码测试(修改为自己的图片路径):
#include <opencv2/opencv.hpp>
#include <opencv2/xfeatures2d.hpp>
//#include <opencv2/>using namespace std;
using namespace cv;int main()
{cv::Mat imageL = cv::imread("origin_1.jpg");cv::Mat imageR = cv::imread("origin_2.jpg");/*imshow("1", imageL);imshow("2", imageR);waitKey();return 0;*///提取特征点方法//SIFTcv::Ptr<cv::xfeatures2d::SIFT> sift = cv::xfeatures2d::SIFT::create();//ORB//cv::Ptr<cv::ORB> orb = cv::ORB::create();//SURF//cv::Ptr<cv::xfeatures2d::SURF> surf = cv::xfeatures2d::SURF::create();//特征点std::vector<cv::KeyPoint> keyPointL, keyPointR;//单独提取特征点sift->detect(imageL, keyPointL);sift->detect(imageR, keyPointR);//画特征点cv::Mat keyPointImageL;cv::Mat keyPointImageR;drawKeypoints(imageL, keyPointL, keyPointImageL, cv::Scalar::all(-1), cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS);drawKeypoints(imageR, keyPointR, keyPointImageR, cv::Scalar::all(-1), cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS);//显示窗口cv::namedWindow("KeyPoints of imageL");cv::namedWindow("KeyPoints of imageR");//显示特征点cv::imshow("KeyPoints of imageL", keyPointImageL);cv::imshow("KeyPoints of imageR", keyPointImageR);//特征点匹配cv::Mat despL, despR;//提取特征点并计算特征描述子sift->detectAndCompute(imageL, cv::Mat(), keyPointL, despL);sift->detectAndCompute(imageR, cv::Mat(), keyPointR, despR);//Struct for DMatch: query descriptor index, train descriptor index, train image index and distance between descriptors.//int queryIdx –>是测试图像的特征点描述符( descriptor )的下标,同时也是描述符对应特征点(keypoint)的下标。//int trainIdx –> 是样本图像的特征点描述符的下标,同样也是相应的特征点的下标。//int imgIdx –>当样本是多张图像的话有用。//float distance –>代表这一对匹配的特征点描述符(本质是向量)的欧氏距离,数值越小也就说明两个特征点越相像。std::vector<cv::DMatch> matches;//如果采用 flannBased 方法 那么 desp通过orb的到的类型不同需要先转换类型if (despL.type() != CV_32F || despR.type() != CV_32F){despL.convertTo(despL, CV_32F);despR.convertTo(despR, CV_32F);}cv::Ptr<cv::DescriptorMatcher> matcher = cv::DescriptorMatcher::create("FlannBased");matcher->match(despL, despR, matches);//计算特征点距离的最大值 double maxDist = 0;for (int i = 0; i < despL.rows; i++){double dist = matches[i].distance;if (dist > maxDist)maxDist = dist;}//挑选好的匹配点std::vector< cv::DMatch > good_matches;for (int i = 0; i < despL.rows; i++){if (matches[i].distance < 0.5 * maxDist){good_matches.push_back(matches[i]);}}cv::Mat imageOutput;cv::drawMatches(imageL, keyPointL, imageR, keyPointR, good_matches, imageOutput);cv::namedWindow("picture of matching");cv::imshow("picture of matching", imageOutput);cv::waitKey(0);return 0;
}
结果:
参考链接:
- OpenCV 学习笔记 06 SIFT 使用中出现版权问题 error: (-213:The function/feature is not implemented)
- OpenCV3.1.0 安装配置与 OpenCV_contrib库配置
opencv_contrib安装笔记相关推荐
- 快速上手opencv_contrib安装(Windows11)
目录 一.安装资料准备 二. 安装编译 1. cmake安装 2. opencv4.2.0源代码编译和opencv4.2.0_contirb解压 3. opencv编译 4. oppencv_cont ...
- laravel安装笔记 (转)
一.安装composer 安装之前将\php\php.ini文件中的php_openssl.dll扩展库开启,否则composer在安装过程中会出现错误提示. (我在安装过程中发现apache目录下的 ...
- 前端开发学习笔记 - 1. Node.JS安装笔记
Node.JS安装笔记 Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an ...
- Oracle安装笔记
Oracle安装笔记 出现错误后不要慌,最主要的是看log文件的提示,其中比较简单的文件是install目录下的make.log 错误一: client_shared For example: /us ...
- convirt2.5在虚拟机上安装笔记
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...
- SVN的安装笔记和要注意的问题
SVN的安装笔记和要注意的问题 之前装的SVN 1.3.2,按网上说的教程,一配置就可以用了,但这次换了1.4.2的最新版本, 只是设置了server.conf和passwd后,依然在导入项目时,说验 ...
- pycharm不同py文件共享参数_PyCharm安装笔记
1. 介绍 1.1 介绍 今天福哥带着大家学习如何安装非常好用的Python编辑器,也就是jetbrains全家桶的PyCharm编辑器. PyCharm是jetbrans开发的一款专门用来编写Pyt ...
- ubuntu18.04 Qt Creator 安装+ROS Qt Creator Plug-in 插件安装笔记
ubuntu18.04 Qt Creator 安装+ROS Qt Creator Plug-in 插件安装笔记: 一.Qt Creator 5.10安装 官网下载地址: http://download ...
- Windows10+Ubuntu 18.04.2+ROS 安装笔记(SSD单硬盘)下
Windows10+Ubuntu 18.04.2+ROS 安装笔记(SSD单硬盘)下 一.前言 二.化繁为简 二.补充说明 三.测试ROS 是否安装成功 一.前言 最近需要学习ROS和python,于 ...
最新文章
- Mask-RCNN论文解读
- python管理技巧_8个经典的Python列表技巧,让你数据处理更简单!
- Android Activity形象描述
- 你们可能都小看了Windows!
- JDK 14中更好的NPE消息
- linux环境安装tomcat8,启动时,报not touch:/user/tomcat/tomcat8/logs/catalina.out:not a file or directory...
- python通过什么连接数据库_如何使用python连接数据库?
- 微软云计算介绍与实践(实践之三十五)
- android小灯泡实验代码,typecho常用代码片段收集
- c#: using Microsoft.Office.Interop.Excel 异常
- thinkphp 3.2视图里添加URL参数 实例
- rsyslog及loganalyzer
- 暴风雨前的耳聋:普京在9·11前两天致电布什,警告可能发生恐袭
- 分布式数据库TiDB在携程的实践
- 学习可爱彩色线条PS极简马克笔简笔画:鞋子篇
- [数论] EXBSGS(拔山盖世算法)
- 光猫修改配置同步到服务器,光猫—防火墙—3台服务器防火墙需要怎么配置,防火墙做二层?...
- r语言lm函数找不到对象_怎么才能查看R语言某个包某函数源码?
- STG游戏中瞄具的基本原理
- Android平台使用OpenGL实现图形渲染