Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库

最近在vs2019中使用openCV进行图像处理,需要用QT设计交互界面,软件的组合使用与运行环境的配置搞了两天,目前已经配置成功,此文章记录这次的操作历程,以便以后出现问题时,可以审视目前的安装过程以得到解决方法。

目录

一、opencv拓展库的下载以及编译。

1.1、安装cmake

1.2、下载opencv和拓展库

1.3、cmake编译

1.4、vs打开INSTALL.vcxproj的工程文件

      1.4.1   方法一:

       1.4.2  方法二

二、环境配置 

三、qt配置opencv;

3.1、配置

3.1.1  方法1: 手动输入

3.1.2、方法2:用包含外部库的形式:

3.2、代码测试

3.2.1在release下测试

​3.2.2在debug下测试

 四、vs2019配置opencv

4.1、vs2019 配置属性表

4.2、vs配置opencv拓展库测试

 五、在vs里出现不能识别python38_d.lib


电脑先安装VS2019,qt5.15.2,Cmake3.22(注意勾选添加环境变量选项),

一、opencv拓展库的下载以及编译。

1.1、安装cmake

Cmake3.22官方下载下图中的第一个,这个安装过程简单,Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第1张图片

1.2、下载opencv和拓展库

去opencv官网下载,点击library后出现releases,找到自己想要的版本后,点击windows下载,双击后设置解压路径;

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第2张图片

 再去下图中网站下载opencv的拓展库,点击右下角橘色的“克隆/下载

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第3张图片

再将两个解压后的文件放在同一个文件夹下,本文在台式机上放置在D:\opencv4.5.3\opencv文件夹里面,同时新建一个文件夹命名为opencv_newbuild,如下图蓝色栏所示,这里面准备放Cmake编译后的文件

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第4张图片

1.3、cmake编译

打开Cmake软件,先设置如下图两个文件夹路径,设置成下图中间的形式,第一栏设置为opencv源码的文件夹,第三栏为刚新建的opencv_newbuild。

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第5张图片

 第一次点击configure后,因为本地已经安装vs2019,可以设置成下图,采用MSVC2019编译。

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第6张图片

 再点击finish。之后会出现一大片红色,先不用管。

在search里面搜索 OPENCV_EXTRA_MODULES_PATH,添加opencv_contrib库的modules路径

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第7张图片

搜索nonfree,这是Opencv的一个专利库,要使用就在后面打勾,同时搜索world,打勾,只生成一个综合整理后的lib文件。再点一次configure,

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第8张图片

可以多点几次 configure,直到没出现红的,可以去下图路径找到灰色框文件

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第9张图片

打开它,里面没有什么链接之类的说明,如下图,则成功。

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第10张图片

对于出现红色的解决方法网上也有大量的解决方法,需要手动解决,可以参考其他的解决方案,目前本人这种流程操作完成后没有遇到什么问题。

再点generate,完成后,generate右边的open project不再是灰色,在下图路径可以找到一个INSTALL.vcxproj的工程文件,

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第11张图片

1.4、vs打开INSTALL.vcxproj的工程文件

      1.4.1   方法一:

debug和64位下,生成解决方案,漫长的等待后 。

会出现不能打开python38_d.lib的情况,不用管这个问题(也可以在配置时取消含python的选项)。继续下一步

再点install  ——>仅用于项目——> 仅生成install(B),等会就成功。

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第12张图片Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第13张图片

同样的操作在release下再进行一次。

       1.4.2  方法二

(在笔记本电脑重新编译时用的这个方法):在用vs打开后,点《批生成》,如下图

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第14张图片

接着选择

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第15张图片同时选中下面两个选项,

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第16张图片点生成,等待一会儿,就成功了。接下来就是环境配置 

二、环境配置 

右键点击我的电脑——属性——高级系统设置——环境变量后,在系统变量里找到Path,点击编辑,编辑 下图所示的路径。

三、qt配置opencv;

3.1、配置

3.1.1  方法1: 手动输入

配置好的QT在 .pro 文件中手动输入opencv带拓展库重新编译的头文件路径和库文件 

INCLUDEPATH +=D:\opencv4.5.3\opencv\opencv_newbuild\install\include
LIBS +=D:\opencv4.5.3\opencv\opencv_newbuild\install\x64\vc16\bin\libopencv_*.dll

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第17张图片

3.1.2、方法2:用包含外部库的形式:

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第18张图片

方法1和2为dedug下的路径设置形式,见下图左下角

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第19张图片

3.2、代码测试

网上找一个代码

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "opencv2/opencv.hpp"

using namespace cv;
using namespace std;

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //setWindowTitle("QT + OpenCV4");
    Mat src = imread("C:\\Users\\Desktop\\p1.jpg");   //不能有中文路径,不然出错
    Mat img;

    //cvtColor(src, img, COLOR_BGR2RGB);
    namedWindow("name",WINDOW_NORMAL);
    imshow("name",src);
    //ui->label->setPixmap(QPixmap::fromImage(QImage(img.data, img.cols, img.rows, img.step, QImage::Format_RGB888)));
}

MainWindow::~MainWindow()
{
    delete ui;
}

注意不能出现中文路径和文件名,不然会出现下面的错误。

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第20张图片

3.2.1在release下测试

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第21张图片3.2.2在debug下测试

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第22张图片

 四、vs2019配置opencv

注意:下面为在笔记本上重新编译配置的图。不过与上述路径基本一致。

台式机的路径为

D:\opencv4.5.3\opencv\opencv_newbuild

笔记本的路径为

D:\opencv4.5.3\opencvNewBuild   相比台式机的少建立一个文件夹opencv,这个文件夹多余,没什么用。下图为在台式机的路径。

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第23张图片

4.1、vs2019 配置属性表

新建debug和release属性表,在以后新建项目时就可以不用重新配置,直接复制debug和release的两个属性表到新建项目文件夹里面,添加现有的这两个属性表即可。在下图新建的两个属性表分别为NewOpenCvContrib_debug和NewOpenCvContrib_Release。

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第24张图片

NewOpenCvContrib_debug编辑如下图,包含目录库目录里面分别设置文件夹路径为:

//包含目录
D:\opencv4.5.3\opencvNewBuild\install\include

//库目录
D:\opencv4.5.3\opencvNewBuild\install\x64\vc16\lib

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第25张图片

在链接器的附加依赖库项填入  opencv_world453d.lib Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第26张图片

 NewOpenCvContrib_Release的包含目录和库目录与NewOpenCvContrib_debug一样,只是链接器的附加依赖库项填入  opencv_world453.lib。

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第27张图片

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第28张图片

在debug和release时,往往找不到动态链接程序,需要在C盘的windows文件下的两个子文件夹system32或syswow64里面

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第29张图片

同时复制这两个文件

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第30张图片

4.2、vs配置opencv拓展库测试

在网上找了 一段代码测试,在debug和release两种情况下都可以正确运行显示。

#include 
#include 
#include "opencv2/core.hpp"
#include "opencv2/features2d.hpp"
#include "opencv2/xfeatures2d.hpp"
#include "opencv2/highgui.hpp"

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

int main()
{
	Mat img = imread("读取自己的一个图片文件", IMREAD_GRAYSCALE);
	if (img.empty())
	{
		printf("could not load image...\n");
		return -1;
	}
	namedWindow("原图:", WINDOW_NORMAL);
	imshow("原图:", img);

	int minHessian = 400;
	Ptr detector = SURF::create(minHessian);
	vector keypoints;
	detector->detect(img, keypoints);

	Mat img_keypoints;
	drawKeypoints(img, keypoints, img_keypoints, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
	namedWindow("key points", WINDOW_NORMAL);
	imshow("key points", img_keypoints);

	waitKey(0);
	return 0;
}

 DEBUG下运行结果

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第31张图片

release下运行结果

Cmake使用MSVC2019编译OpenCV4.5.3_contrib拓展库;在VS2019和QT 中使用MSVC2019编译的OpenCV拓展库_第32张图片

 五、在vs里出现不能识别python38_d.lib

 关于在vs里出现不能识别python38_d.lib的情况,是在台式机上出现的,在笔记本上没有出现。台式机没有安装python,但安装的是anaconda和pycharm,在出现不能识别问题后,就安装了python以及其debug的版本,也按照网上教程修改anaconda里面的文件,两个方法并没有解决问题。但笔记本没安装anaconda和pycharm,只安装的python,没有出现不能识别python38_d.lib的情况。可以试着总结下,在cmake编译opencv前,提前安装个python及其debug的版本后,应该不会出现不能识别python38_d.lib的情况。

你可能感兴趣的:(opencv,qt,opencv,开发语言,计算机视觉)