opencv-contrib模块详解_opencv安装包

opencv-contrib模块详解_opencv安装包文章目录一、下载与安装二、编译opencv三、编译opencv_contrib四、visualstudio编译五、配置opencv环境配置系统环境变量重新配置项目环境六、测试近来由于需要用到opencv的SIFT特征,但是SIFT等功能已经移入了opencv_contrib中,所以需要重新编译opencv和opencv_contrib。一、下载与安装下载特定版本的opencv和ope…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

近来由于需要用到 opencv 的SIFT特征,但是SIFT等功能已经移入了opencv_contrib 中,所以需要重新编译opencv和opencv_contrib。

一、下载与安装

  1. 下载特定版本的 opencv和opencv_contrib,两者版本要一致。但是由于国内下载GitHub 有时候会非常慢,所以可以下载码云上面的库(opencv码云库和opencv_contrib码云库)。
    opencv-contrib模块详解_opencv安装包
    opencv-contrib模块详解_opencv安装包
    下载 CMake(https://cmake.org/download/)
  2. 下载并安装 visual studio ,安装时添加使用C++的桌面开发。
    opencv-contrib模块详解_opencv安装包
  3. 安装 CMake ,用CMake编译opencv和opencv_contrib
    opencv-contrib模块详解_opencv安装包
    opencv 的 Windows安装包实质上是一个自解压文件,双击解压即可。

二、编译 opencv

opencv-contrib模块详解_opencv安装包
注意 source code 里面指向的不是opencv的解压目录而是里面的source目录。
如图所示, source 文件夹下面有一个CMakeList.txt文件,如果路径错误,就会报CMake Error: The source directory "/opencv" does not appear to contain CMakeLists.txt.错误。
opencv-contrib模块详解_opencv安装包
build 目录为自己建立的空目录
点击“ config ”
opencv-contrib模块详解_opencv安装包
如下,看到自己安装的 visual studio 版本,点击finish。
opencv-contrib模块详解_opencv安装包
开始编译,等待。
opencv-contrib模块详解_opencv安装包

运气不好的话下方出现红色字体,就是有错误出现。如下图所示,是一些文件下载失败
opencv-contrib模块详解_opencv安装包

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"

打开日志文件,使用里面的地址从浏览器里面下载文件。
opencv-contrib模块详解_opencv安装包
文件下载之后,放置在文件相应位置,并修改文件名。
opencv-contrib模块详解_opencv安装包
可以看到原本路径下文件下载失败,所以是 0KB ,所以需要手动下载下来进行替换。
替换之后:
opencv-contrib模块详解_opencv安装包
由于这几个文件可能下载起来比较慢,这里提供网盘链接:

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按钮
opencv-contrib模块详解_opencv安装包
直到下方出现
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-contrib模块详解_opencv安装包
opencv-contrib模块详解_opencv安装包
以下为路径错误时的弹窗:
opencv-contrib模块详解_opencv安装包
在搜索栏中输入 OPENCV_ENABLE_NONFREE ,在value值中点击选中。如果没有选中,那么类似SIFT这种已经被申请专利的方法就无法使用。
然后点击 configure
opencv-contrib模块详解_opencv安装包
在下方出现 Configuring done 之后,点击Generate

和 opencv 基本库编译一样,CMake下方出现Configuring done Generating done,说明opencv_contrib 编译完成。
opencv-contrib模块详解_opencv安装包

四、 visual studio 编译

然后点击 Open Project ,会使用之前选择的特定版本visual studio打开。
opencv-contrib模块详解_opencv安装包
选择 生成->批生成
opencv-contrib模块详解_opencv安装包
在弹出的窗口里面选择的 debug 和release的ALL_BUILD和INATALL,然后点击“生成”。
opencv-contrib模块详解_opencv安装包
该过程会需要较长时间。

五、配置 opencv 环境

配置系统环境变量

生成结束之后,需要修改环境变量。

环境变量在“此电脑”->“属性”->“高级系统设置”->“环境变量”,在用户变量里面的 Path 变量后面添加之前CMake设置的build目录\install\x64\vc16\bin,确定,退出。

如果 visual studio 在修改环境变量之前就打开了,需要重启visual studio

重新配置项目环境

visual studio 中右击项目->“属性”,
opencv-contrib模块详解_opencv安装包
首先可以选择“所有配置” “所有平台”,编辑包含目录和库目录
包含目录编辑为

生成的 build 目录\install\include
生成的 build 目录\install\include\opencv2

库目录编辑为:

生成的 build 目录\install\x64\vc16\lib

opencv-contrib模块详解_opencv安装包
opencv-contrib模块详解_opencv安装包
opencv-contrib模块详解_opencv安装包
编辑包含目录和库目录之后,需要添加附加依赖项,此时需要分别针对 debug 和release两种模式添加。
打开 生成的build目录\install\x64\vc16\lib可以发现每个lib文件都有两种,一种是以d.lib结尾,另一种只比前一种少了一个d,只以.lib结尾。debug模式需要d.lib结尾文件,release模式需要.lib结尾文件,任何一种模式配置错误,就不能以该模式运行opencv。
opencv-contrib模块详解_opencv安装包
所以需要在编辑附加依赖项时添加各自需要的文件名。

opencv-contrib模块详解_opencv安装包
opencv-contrib模块详解_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

opencv-contrib模块详解_opencv安装包
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;*/



	//提取特征点方法
	//SIFT
	cv::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-contrib模块详解_opencv安装包

参考链接:

  1. OpenCV 学习笔记 06 SIFT 使用中出现版权问题 error: (-213:The function/feature is not implemented)
  2. OpenCV3.1.0 安装配置与 OpenCV_contrib库配置
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180180.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 矩阵的秩及其求法

    矩阵的秩及其求法矩阵的秩及其求法矩阵秩的概念k阶子式矩阵的秩矩阵秩的求法1、子式判别法(定义)2、用初等行变换求矩阵的秩满秩矩阵矩阵秩的概念k阶子式定义1:设A=(aij)m×nA=(a_{ij})_{m\timesn}A=(aij​)m×n​在AAA中任取kkk行kkk列交叉处元素按原相对位置组成的kkk(1≤k≤min{m.n})(1\leqk\leqmin\lbracem.n\rbrace)(1≤k≤min{m.n})阶行列式,称为AAA的一个kkk阶子式。m×nm\timesnm×n的矩阵A

    2022年5月30日
  • SEVERE: Error filterStart 错误解决「建议收藏」

    SEVERE: Error filterStart 错误解决「建议收藏」使用jfinal写的项目,去掉jetty包,加入javaee.jar包,然后打包,部署到ubuntu的tomcat6下运行

    2022年7月15日
  • 网络入门及制作双绞线实验结论_计算机网络双绞线包括哪几种类型

    网络入门及制作双绞线实验结论_计算机网络双绞线包括哪几种类型专业软件工程姓名小何学长实验目的:1. 掌握RJ-45双绞线的直通线和交叉线的制作方法,了解其应用场合。2. 利用测线仪测试网线是否正常。实验原理:1. 双绞线简介双绞线是最常用的网络传输媒体,其型号10BBASE-T、100BASE-T是指10Mbps、100Mbps以基带传输方式工作的双绞线。按信号线外面有无屏蔽保护层分为:屏蔽双绞线——STP,有金属网丝套作为屏蔽层,无分类;无屏蔽双绞线——UTP,没有屏蔽层,有多个分类,如UTP-3,UTP-5,UTP-5+多…

    2022年10月28日
  • golang json 转map

    golang json 转map//convertjsontomappackagemainimport(“fmt””encoding/json”)funcmain(){b:=[]byte(`{“IP”:”192.168.11.22″,”name”:”SKY”}`)m:=make(map[string]string)err:=json.Unmarsha

    2022年6月16日
  • pycharm linux安装[通俗易懂]

    pycharm linux安装[通俗易懂]

    2022年11月2日
  • Pytorch版本、CUDA版本与显卡驱动版本的对应关系

    Pytorch版本、CUDA版本与显卡驱动版本的对应关系参考链接:INSTALLINGPREVIOUSVERSIONSOFPYTORCH解决PyTorch与CUDA版本不匹配1.CUDA驱动和CUDAToolkit对应版本注:驱动是向下兼容的,其决定了可安装的CUDA和CUDAToolkit的最高版本。2.CUDA及其可用PyTorch对应版本(参考官网,欢迎评论区补充)注:虽然有的卡CUDA版本可更新至新版本,且PyTorch也可对应更新至新版本。但有的对应安装包无法使用,有可能是由于卡太旧的原因。3.安装指导(1)指定安装PyTor

    2022年6月16日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号