Windows环境下最新OpenCV和Contribute代码的联合编译【20180926更新红字】

简介: 解决这个问题,目的在于获得并使用最新的完全版本的代码,主要方法是对CMake能够熟练使用,并且对编译等基础支持有所了解。因为这篇博客经过多次修改,所以里面的内容和配图可能有不是完全比对的地方,但是只要加以理解,关键信息肯定可以Get到的,后面我会在所处视频中对相关信息进行进一步整编,方便理解。
解决这个问题, 目的在于获得并使用最新的完全版本的代码, 主要方法是对CMake能够熟练使用,并且对编译等基础支持有所了解。
因为这篇博客经过多次修改,所以里面的内容和配图可能有不是完全比对的地方,但是只要加以理解,关键信息肯定可以Get到的,后面我会在所处视频中对相关信息进行进一步整编,方便理解。
一、工具的准备
1 tortoisegit www.tortoisegit.org(可选)
2 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件
3 vs2017
二、最新代码的下载(OpenCV和Contribute分别下载)
Http直接下载
img_ca0933f154e6a95e75eb4397da0cd99d.jpe
或者通过git下载
img_a9cf9d5536aabf716879b00f90586ba5.png
下载的结果解压后放在一起
img_dc1ddbc0d8120e2d0d9a690093d24299.png
三、代码的make
img_d011b5714e68c85d9551dfc7ef7e7524.png
Cmake将原始代码make成为你选择的编译器能够编译的形式, 最新版本的cmake已经是3.12了。
主要流程为两次Configure->一次Generate->Open Project打开vs进行编译。参数的不同带来了结果的不同。其中注意以下几点
1、 64位和32位的选择体现在选择编译器的时候是否选择Win64。我认为一般意义上说,32位的程序可以以兼容模式运行在64位机器上,反过来不可以。那么也就是说32位以效能换取兼容性。 使用时根据实际情况选择。建议新手从32位开始
img_b4a6026416b2bce5197e0f4a9ebb4cb6.jpe
2、 静态库和动态库的选择体现在是否选择BUILD_SHARED_LIBS(默认是选中的)。如果选择静态库,那么最后生成的程序和支持库是打包到一起的,交付起来比较方便;如果是动态库则是分开的。效能问题没有研究过。新上手的选择 默认动态库 。同时建议将BUILD_opencv_world选中,这样最后的结果是一个文件。
img_5b935cdf56009c39f56b2d17511b89aa.jpe
这个过程中,会下载较多东西,统一下载在.cache文件夹中
img_39054919d7913cb84f9c687e3262be90.png
img_c78b1d1581ba57a9cf897abf64e82324.png

我提供一个制作课件过程中的.cache版本

链接:https://pan.baidu.com/s/1440uWXUVaiDLFUqc6AF56A 
提取码:v5e7

这里,值得注意的一点是,选择的项目,可以通过搜索的方式进行加速,比如我在cmake中输入"worl",将自动导航到"BUILD_opencv_world"条目中来。
img_aab0fff50182c378444f86bd5b163b3b.png
这个地方,需要多说一句,CMAKE这个地方是最容易出现问题的地方,一方面是因为CMAKE这里的信息很多,大家有可能会感到无法适应;一方面是因为CMAKE大家接触的比较少,不是很熟悉;再加上CMAKE的过程中,有时需要再从网络上下载一些东西,如果网络不好的话,也会导致失败。在前期的视频中,我总结的具体方法为:"两次Config,一次Generate"这里加以补充:
a、 Config的目的主要是让你对CMAKE里面的相关内容进行选择的,第一次Config是把所有需要配置的项目显示出来,然后你进行修改(就是打钩子和去掉钩子),第二次config是为了配置你修改后的内容
img_ad4154e93e0a1f12795235a5cf8ad90d.png
所有红色的内容都是可以修改的
b、 需要关注的地方,是下面,最好不要有红色,至少不要有error
img_7b2f9a6f2d92306ef402f92375d96172.png
c、 generate就是生成可以被编译器编译的项目,这样我们打开vs2017就可以直接编译了
3、最为重要的,也是和普通OpenCV代码编译不同的地方。其中OPENCV_EXTRA_MODULES_PATH 中要填入contrib-master下的modules目录
img_4277d72949762749599ce4efe45edb22.png
特别是这个地方,要将OPENCV_ENABLE_NONFREE打开!!!
img_b1a3ade86713a9b6a15f77253dc11002.png
编译生成的结果,能够不飘红就可以。
确定,两次config,一次generate
img_7af7976dc33ecae8abb55f793d53a554.png
四、代码的编译
打开vs环境,选中 批生成,生成install即可,其它的会自动调用(我非常推荐这样做,因为经过实验,这样最省时间,而且达到效果)
img_679d86bbe1b3c8a883e3c3bb0f868677.jpe
根据机器性能,等待不同的时间
img_fdcf66adbe179b409649eb04ff2cf274.jpe
比较吃CPU
img_ada19436f8390df3ac58bb265aa70031.jpe
如果出现这个错误(我出现了这个错误)

img_6500b9d6dc70a7c15760d918b6a85f8a.png
应该是HDF5的问题,所以回过去将其去掉。
img_1cf7cad014bdd1797653796401a9c42a.png
按照我这个方法,最后能够直接成功的。
img_9871ebb74d131d15a62087c8fcacf77f.png
img_a3634cc3f983f048f30874db21ecb541.png
那么最终生成的文件在哪里?其实是在install中的

img_c13b1c71cabee901083d4be4f65359c6.png
可以看到,已经按照容易使用的方式排列好了
img_7589b409d8b9fba65ab68828d70f4316.png

这张图能够帮助看得更清楚:
img_11fece07a3d6e75736c1b496ccfbc3d0.jpe
我们最后需要的,显然是.dll文件,它被放置在bin/release目录下面
img_897149196cd98f9ee62b32ce408cbd72.png
此外,我们还可以通过比较获得一些信息(左边是不带contrib的,右边是带contrib的)
img_0e7c4c26606336bf940b05b6ed6ef6c0.jpe img_8d5d15d81ffc77a42d410e1a4504c305.jpe
可以看到,无论是lib的大小,还是include中文件的数量,contrib都要大一些。
img_9797041c3d5974448577142c7edac461.jpe
这个角度也是可以看到的。
五、在新项目中使用OpenCV
将需要的东西放到一起
img_233871ed374210edf46c120890ff0614.png
动态库模式:
在VC++目录中设定"包含目录"为include地址;"库目录"为提供的lib地址。注意这里的lib地址只是提供了接口信息。 img_a6350e917b9be3dd5970a8b3c3011d96.jpe
链接器->输入 填入lib名称
img_51aaab5f927d7bca665b1a3095a20634.jpe
将dll文件拷贝到PATH目录能够指向的地方,比如"C:\Windows\System", 这个具体的位置只和编译的时候相关,所以多试几次就会找到,一般来说都是system里面     
注意在交付的时候需要将支持的dll文件一并提供。
静态库修改 (注意静态库和动态库选择其一即可)
设置Include
img_008ae67f5e5032060a0490e7e5aa9a2f.jpe
设置引入"常规 附加库目录"
img_7d34f6d0a1b85a560f4be8353ee43c3b.jpe
设置lib(注意填全,不仅仅是opencv_word,注意后面.lib也要写)
img_542e9a337a70cb044013a2b6b5383941.png
注意,需要将"代码生成"的"运行库"改为"多线程调试"。这样就将MFC自己的支持库包含在最后生成的exe中了。
img_91e8350ad688df92807dca4bedd7437c.png
如果想要在程序设计的过程中,能够直接修改OpenCV自己的代码,添加相关功能,首先将Opencv项目引入
img_af9a8052563c3f3957a361c953844648.jpe
而后添加引用设置项目依赖,就可以直接在项目中修改OpenCV的代码,生成符合自己要求的专用类库。更可以通过Pull/request的方法直接申请提交。
img_778b4884b14d06d2ff68fbfe984ce3da.png     
最后,编写代码的时候,头文件和命名空间要选择正确,因为我们实现的是shift,所以需要做一个shift操作:

img_864fa780c08da353d728114e40e3aae2.png

目前从结果来看 img_6d30cd081342e6baf0c4609445a0a6fb.jpe
// opencvtest.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
#include "pch.h"
#include <iostream>
#include <opencv2/core/utility.hpp>
#include "opencv2/video/tracking.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/videoio.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/xfeatures2d.hpp"
#include <iostream>
#include <ctype.h>
using namespace cv;
using namespace std;
using namespace xfeatures2d;
int main()
{
    Mat matSrc = imread("e:/template/lena.jpg");
    Mat gray;
    Mat draw;
    cvtColor(matSrc, gray, COLOR_BGR2GRAY);
    Mat descriptors;
    std::vector<KeyPoint> keypoints;
    // 生产sift结构
    Ptr<SiftFeatureDetector> siftFD = SiftFeatureDetector::create();
    siftFD->detectAndCompute(gray, Mat(), keypoints, draw);
    drawKeypoints(gray, keypoints, gray, Scalar(00255), DrawMatchesFlags::DEFAULT);
    imshow("gray", gray);
    waitKey(0);
    return 0 ;
}
如果配置错误,opencv会有自己的显示
img_b2f3f75d02ce496c3026ddb991cf66fd.png
感谢阅读至此,希望有所帮助!




附件列表

 

目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com
目录
相关文章
|
2月前
|
计算机视觉 Windows Python
windows下使用python + opencv读取含有中文路径的图片 和 把图片数据保存到含有中文的路径下
在Windows系统中,直接使用`cv2.imread()`和`cv2.imwrite()`处理含中文路径的图像文件时会遇到问题。读取时会返回空数据,保存时则无法正确保存至目标目录。为解决这些问题,可以使用`cv2.imdecode()`结合`np.fromfile()`来读取图像,并使用`cv2.imencode()`结合`tofile()`方法来保存图像至含中文的路径。这种方法有效避免了路径编码问题,确保图像处理流程顺畅进行。
171 1
|
2月前
|
Linux C++ Windows
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
|
7天前
|
并行计算 JavaScript 算法
opencv4.5.1+contrib+cuda编译成功,实时人头匹配,手动狗头
这篇文章介绍了如何在Windows 10上使用Visual Studio 2017成功编译OpenCV 4.5.1及其contrib模块和CUDA支持,并解决了编译过程中的问题,如项目文件无效、cmake工具问题,并添加了Qt和JavaScript支持,同时提供了参考链接。
opencv4.5.1+contrib+cuda编译成功,实时人头匹配,手动狗头
|
7天前
|
JavaScript 计算机视觉 C++
win10+vs2017+opencv4.5.1+contrib+cuda编译成功,实时人头匹配,手动狗头
这篇文章介绍了如何在Windows 10系统上使用Visual Studio 2017和OpenCV 4.5.1(含contrib模块和CUDA支持)成功编译OpenCV,并解决了编译过程中遇到的问题,如项目文件无效、cmake工具问题、添加Qt和JavaScript支持,并提供了参考链接和cmake配置文件。
win10+vs2017+opencv4.5.1+contrib+cuda编译成功,实时人头匹配,手动狗头
|
7天前
|
计算机视觉
vs2019_qt6.2.4_dcmtk3.6.7_vtk9.2.2_itk5.3_opencv4.6.0编译记录
这篇文章记录了使用VS2019编译Qt6.2.4、DCMTK3.6.7、VTK9.2.2、ITK5.3和OpenCV4.6.0的过程,包括下载和编译步骤,并提供了遇到编译错误时的解决方案和参考链接。
vs2019_qt6.2.4_dcmtk3.6.7_vtk9.2.2_itk5.3_opencv4.6.0编译记录
|
7天前
|
机器学习/深度学习 Java 计算机视觉
opencv4.5.5+qt5.15.2+vtk9.1+mingw81_64编译记录
本文记录了使用mingw81_64编译OpenCV 4.5.5、Qt 5.15.2、VTK 9.1的详细过程,包括编译结果截图、编译步骤、遇到的问题及其解决方案,以及相关参考链接。文中还提到了如何编译boost源码为静态库,并提供了测试代码示例。
opencv4.5.5+qt5.15.2+vtk9.1+mingw81_64编译记录
|
24天前
|
SQL JavaScript 数据库
sqlite在Windows环境下安装、使用、node.js连接
sqlite在Windows环境下安装、使用、node.js连接
|
2月前
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
|
9天前
|
Windows
Windows7电脑启动时提示文件winload.exe无法验证其数字签名,错误代码0xc0000428的解决方法
Windows7电脑启动时提示文件winload.exe无法验证其数字签名,错误代码0xc0000428的解决方法
|
2月前
|
Java 应用服务中间件 Windows
【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
下一篇
无影云桌面