倒计时结束后,将进入手动下载
下载后,将文件复制到您熟悉的文件夹中,方便以后使用。
我直接在桌面上新建了一个名为opencv的文件夹,用来存放这次配置opencv需要的所有文件。
二:安装opencv
双击
安装,这个安装过程也是完全傻瓜式的,只是需要注意一件事,opencv安装目录下不应该有英文路径。
如图所示,我的安装目录如下。 由于本次安装的是4.5.5版本,所以我直接将目录重命名为opencv455,以便于理解。
三:配置opencv环境变量,测试opencvx64库
此笔记本->右键属性->中间系统设置->环境变量
按照以下步骤配置环境变量
我已经配置了一个名为 OpenCV455_x64_vs2017 的变量
接下来,将此变量添加到环境变量中。 双击Path,将OpenCV455_x64_vs2017添加到Path环境变量中。
四:配置vs项目环境,调用opencv库
下面我使用vs2019调用opencvx64库
可以看到安装的opencv文件夹中有一个目录:
该目录下有vc14和vc15两个目录。 这两个目录分别存放vs2015编译的库和vs2017编译的库。 这里我们测试vc15(vs2017)的库
使用vs2019创建一个win32控制台空项目程序,添加cpp文件,在文件中添加以下代码:
#include
#include
#include
using namespace cv;
int main()
{
// 读入一张图片(poyanghu缩小图)
Mat img = imread("C:\Users\ljl\Desktop\桌面杂物箱\ascii码表.jpg");
// 创建一个名为 "图片"窗口
namedWindow("图片");
// 在窗口中显示图片
imshow("图片", img);
// 等待6000 ms后窗口自动关闭
waitKey(60000);
return 0;
}
此时项目结构如下:
由于我们测试的是x64库,所以这里必须选择x64。
ps:其实我们都知道64位系统可以兼容32位程序,并且记住这是针对系统而言的,我们使用的IDE需要明确区分32位和64位,其中涉及到编译过程。 在我的工作经验中,x64程序无法调用32位动态库。
在项目属性中配置opencv库,配置如下
在包含目录中添加:
D:openCVopencv455buildincludeopencv2
D:openCVopencv455buildinclude
在库目录中添加:
D:openCVopencv455buildx64vc15lib
在Linker->Input->Additional Dependency中添加opencv_world455d.lib
虽然从里面的配置可以看出,但是这次是隐式调用了动态库。 关于动态库的调用方法,可以学习如下
C++动态函数库的创建和调用(.def) VS2005环境下写的一个简单的动态库的方式,上面有两个函数,可以实现乘法和除法。 首先创建一个空的项目dll,创建头文件,然后创建源文件,然后创建模块定义文件,即.def文件。 创建动态库所需的条件已满足。 在头文件中写入以下代码 在源文件中写入以下代码 在源文件 F7 的模块定义文件中写入以下代码,生成动态库 .def 中第一行是数据库名称,No... 。
配置好环境后,编译程序,将opencv_world455d.dll复制到程序生成目录下。
运行如下
这说明opencv调用正常了c源码编译教程,以后使用opencv的时候只需要这样配置就可以了。
这里为什么可以用vs2019来调用,但是文章一开始就要求IDE必须是vs2015/2017,因为调用别人的库只要配置好环境就可以在任何IDE中调用。 现在我们要编译x86库,我们必须使用vs2015/2017。 事实上,你注意到我们下载的opencv可执行程序的名称很奇怪。
文件名表明这个版本的opencv只兼容vc14和vc15,那么它们是什么意思呢?
vc 7 : Visual Studio2003
vc 8 : Visual Studio2005
vc 9 : Visual Studio2007
vc 10: Visual Studio2009
vc 11: Visual Studio2011
vc 12: Visual Studio2013
vc 14: Visual Studio2015
vc 15: Visual Studio2017
也就是说,如果要编译这个版本的opencv源码,就必须使用vc14或者vc15工作环境。
我们都知道C++项目开发首先需要统一的是开发工具。 不同的开发工具使用不同的编译环境。 虽然编译环境可以自动改变,而且要花不少功夫,但opencv总共有300+个编译项目。 如果我们不知道项目配置,就乖乖使用opencv官网推荐的版本来编译。 我尝试使用vs2019编译,但以失败告终。 不要用你的聪明来挑战IDE之间的差异
五:编译opencvx86版本
设计条件:下载cmake
下载|CMake
下载箭头所指的cmake版本并安装
安装在D盘根目录
安装完成后,打开以下程序
打开后界面如下图
以上是使用cmake时需要注意的几点。 与命令行相比,cmake的UI界面变得相当容易理解。
好了,现在开始opencv的x86编译
安装opencv的时候本地已经安装了opencv的源码位置。 找到步骤2中你安装opencv的目录,如下
点击finish开始编译
可以通过stop来停止。 这里我们等待一段时间让它执行完成。
这里表示执行结束
检查以下两个配置
其余使用默认配置即可
然后点击Generate两次(编译一次完成再点击编译)。 编译完成。 (注:这个过程可能会报错,不需要开会)。
这意味着项目建立完成
接下来使用vs2017编译生成动态库。
项目打开后如图所示,我们需要的是32位版本。 这里我们选择x86或者win32。 它们之间的具体区别如下
编译release32位版本
经过漫长的等待,终于编译完成了。 非常完美,没有报告任何错误。
编译成功后,在解决方案资源管理器—>CMakeTargets—>INSTALL—>右键INSTALL—>only forprojects—>onlygenerateINSTALL
然后打开cmake生成文件的存放路径文件夹,找到install文件夹,上面的x86就是我们需要的
好了,现在release版本编译完成了,我们来编译debug版本
CMakeTargets—>INSTALL—>右键INSTALL—>仅适用于项目—>仅生成INSTALL
进入cmake生成文件的存放路径文件夹,找到install文件夹,查看上面的x86文件夹
这两个动态库就是我们需要的,其中opencv_world455.dll是release版本c源码编译教程,opencv_world455d.dll是debug版本。
接下来使用前面的四个:配置vs项目环境,调用opencv库测试这两个库是否可以使用
这次使用vs2017测试
首先复制生成的文件,以便我们配置环境变量
将安装目录中的 x86 复制到构建目录
这样我们自己编译的x86和opencv官网编译的x64就在同一个目录了,是不是更方便呢?
配置环境变量的步骤请参见第4部分。
打开vs2017,新建一个win32控制台空项目(过程与第四部分一模一样)
启动vs项目配置,使用opencv库(debugx86配置)
附加文件目录
D:openCVopencv455buildinclude
D:openCVopencv455buildincludeopencv2
附加库目录 D:openCVopencv455buildx86vc15lib
附加依赖opencv_world455d.lib(名字带d的意思是调试库)
编译成功生成x86版本的调试程序,并将opencv_world455d.dll复制到程序目录下。
以上说明我们编译成功的opencvx86库
如果你聪明的话,应该能够触类旁通地测试一下release版本吧?
多于