VS2019+Opencv4.0.1及扩展模块的编译

VS2019+Opencv4.0.1及扩展模块的编译

由于学习的需要,需编译扩展模块opencv_contrib-4.0.1,我在其中遇到一些坑,想记录一下。

步骤
1.下载opencv4.0.1_contrib-4.0.1扩展模块
opencv_contrib-4.0.1下载
2.下载Cmake3.13版本以上的
真心话,这东西官网下载慢的要死,其他地方不是要钱就是要积分。
这里分享一下windows下载网址:
cmake3.15-win32-x86.msi
cmake3.15-win64-x64.msi
3.在cmake中重新配置原有的opencv下的sources,保存在新建目录newbuild
在这里插入图片描述
点击configure,就能编译配置。

4.在3步骤中,继续编译opencv_contrib-4.0.1
找到图中蓝色的两项,
其中一项是你编译扩展模块opencv_contrib-4.0.1的位置
另一项是必须要打勾的,因为opencv4.0版本以后一些扩展模块,要勾选 OPENCV_EXTRA_NONFREE项,否则在运行SIFT、SURF等函数时会报错 Error: The function/feature is not implemented (This algorithm is patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library) ;
在这里插入图片描述
然后点击Generate,可能第一次会出现红色,但是只要不是说无法下载的,基本不碍事,不然再点一次configure,及Generate。只要出现
Configuring done
Generation done
就代表可以。cmake部分就结束了。
5.配置VS2019

打开你刚才newbuild的位置
在这里插入图片描述
找到OpenCV.sln,双击。此时VS会将这个文件打开
在这里插入图片描述
这里分两种(注意到我鼠标的位置,选择对应的类型)
第一种:release x64(我的是64位)版本
右键点击左边的ALL_BUILD,生成,待生成完毕
继续右键点击INSTALL,生成。如果顺利,则全都生成成功
第二种:debug x64(我的是64位)版本
右键点击左边的ALL_BUILD,生成,待生成完毕
继续右键点击INSTALL,生成。如果顺利,则全都生成成功
在这里插入图片描述

生成成功,会在newbuild目录下看到install目录,打开,如图
在这里插入图片描述
这四个目录就是我们需要的东西,说明一点:此时的lib文件夹,我不知道是不是因为我同时配置了debug及release版本,以前是在install/x64/vs14 orvs15/lib,现在直接就在install/lib

别人的:lib位于x64文件夹下,打开只有debug的lib文件
在这里插入图片描述
我的打开
在这里插入图片描述
发现没有,我的每一个lib文件,分别分debug版本(有d结尾)及release版本(没有d结尾)

6.接下来就是配置OPENCV环境变量
简单,就系统变量的Path加入newbuild的bin及lib
7.在VS2019配置包含目录及库目录以及附加依赖项
关闭VS2019,重新打开,新建Opencv工程 C++控制台程序
依次点击:视图–属性管理器–属性
在这里插入图片描述
在VC++目录,包含目录填写newbuild\install\include,及newbuild\install\include\opencv2位置,库目录newbuild\install\lib

在这里插入图片描述在这里插入图片描述
debug模式,则链接器中的输入填入debug(有d结尾)的lib文件
opencv_aruco401d.lib
opencv_bgsegm401d.lib
opencv_bioinspired401d.lib
opencv_calib3d401d.lib
opencv_ccalib401d.lib
opencv_core401d.lib
opencv_datasets401d.lib
opencv_dnn401d.lib
opencv_dnn_objdetect401d.lib
opencv_dpm401d.lib
opencv_face401d.lib
opencv_features2d401d.lib
opencv_flann401d.lib
opencv_fuzzy401d.lib
opencv_gapi401d.lib
opencv_hfs401d.lib
opencv_highgui401d.lib
opencv_imgcodecs401d.lib
opencv_imgproc401d.lib
opencv_img_hash401d.lib
opencv_line_descriptor401d.lib
opencv_ml401d.lib
opencv_objdetect401d.lib
opencv_optflow401d.lib
opencv_phase_unwrapping401d.lib
opencv_photo401d.lib
opencv_plot401d.lib
opencv_reg401d.lib
opencv_rgbd401d.lib
opencv_saliency401d.lib
opencv_shape401d.lib
opencv_stereo401d.lib
opencv_stitching401d.lib
opencv_structured_light401d.lib
opencv_superres401d.lib
opencv_surface_matching401d.lib
opencv_text401d.lib
opencv_tracking401d.lib
opencv_video401d.lib
opencv_videoio401d.lib
opencv_videostab401d.lib
opencv_xfeatures2d401d.lib
opencv_ximgproc401d.lib
opencv_xobjdetect401d.lib
opencv_xphoto401d.lib

release模式,则把上面的文件名尾缀d去掉
opencv_aruco401.lib
opencv_bgsegm401.lib
opencv_bioinspired401.lib
opencv_calib3d401.lib
opencv_ccalib401.lib
opencv_core401.lib
opencv_datasets401.lib
opencv_dnn401.lib
opencv_dnn_objdetect401.lib
opencv_dpm401.lib
opencv_face401.lib
opencv_features2d401.lib
opencv_flann401.lib
opencv_fuzzy401.lib
opencv_gapi401.lib
opencv_hfs401.lib
opencv_highgui401.lib
opencv_imgcodecs401.lib
opencv_imgproc401.lib
opencv_img_hash401.lib
opencv_line_descriptor401.lib
opencv_ml401.lib
opencv_objdetect401.lib
opencv_optflow401.lib
opencv_phase_unwrapping401.lib
opencv_photo401.lib
opencv_plot401.lib
opencv_reg401.lib
opencv_rgbd401.lib
opencv_saliency401.lib
opencv_shape401.lib
opencv_stereo401.lib
opencv_stitching401.lib
opencv_structured_light401.lib
opencv_superres401.lib
opencv_surface_matching401.lib
opencv_text401.lib
opencv_tracking401.lib
opencv_video401.lib
opencv_videoio401.lib
opencv_videostab401.lib
opencv_xfeatures2d401.lib
opencv_ximgproc401.lib
opencv_xobjdetect401.lib
opencv_xphoto401.lib

应用,OK!
测试
SURF特征检测

#include <opencv2/opencv.hpp>
#include <opencv2/xfeatures2d.hpp>
#include <iostream>

using namespace cv;
using namespace cv::xfeatures2d;
using namespace std;

int main(int argc, char** argv) {
	Mat src = imread("D:/vcprojects/images/test.png", IMREAD_GRAYSCALE);
	if (src.empty()) {
		printf("could not load image...\n");
		return -1;
	}
	namedWindow("input image", CV_WINDOW_AUTOSIZE);
	imshow("input image", src);

	// SURF特征检测
	int minHessian = 100;
	Ptr<SURF> detector = SURF::create(minHessian);
	vector<KeyPoint> keypoints;
	detector->detect(src, keypoints, Mat());

	// 绘制关键点
	Mat keypoint_img;
	drawKeypoints(src, keypoints, keypoint_img, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
	imshow("KeyPoints Image", keypoint_img);

	waitKey(0);
	return 0;
}

在这里插入图片描述

扫描二维码关注公众号,回复: 9440487 查看本文章

遇到的坑

1.生成的时候,提示无法打开python3.6_d.lib,或没有这个文件。
解决办法:打开自己的PYTHON路径下的include,找到pyconfig.h,这是C++头文件,修改如下
把 #define Py_DEBUGE注释
在这里插入图片描述
把图中的python36_d.lib修改为python36.lib;

在这里插入图片描述
保存,重新在VS生成,成功。
2.opencv4.0版本必须Cmake3.13以上,最好3.15以上。
3.debug生成与release生成这两种,我们往往只选择一种,不用像别人说的两种都生成。
4.先 点ALL_BUILD生成,再点INSTALL 生成!!!生成成功率高。

发布了50 篇原创文章 · 获赞 24 · 访问量 2428

猜你喜欢

转载自blog.csdn.net/qq_44861675/article/details/103999279
今日推荐