1.首先需要下载openCV。也可以同时下载openCV-contrib(包含更多算法,详见opencv_contrib安装笔记_weijifen000的博客-CSDN博客_opencv_contrib),还需要下载CMake。
2.解压openCV后,利用CMake将openCV自带的动态库编译成静态库。
通常我们的OpenCV项目在学习或研究阶段,使用动态库足矣,当OpenCV程序需要发布时,尤其是程序需要拷到没有OpenCV环境的机器上运行时,静态库文件就会比较便捷。
最后生成的exe文件就可以在没有安装openCV的机器上直接运行,非常方便。
具体的编译步骤见VS2013_CMake_opencv3.1动态库与静态库的配置与编译 - LiveZingy。
关键步骤: OpenCV的源码中的CMAKE文件默认编译动态库,默认勾选BUILD_SHARED_LIBS选项,编译静态库时只需要取消该选项即可,这也是编译静态库和动态库的在设置上唯一差别。
(后续我使用的是动态库,故仍勾选了该选项;其中缺少某个CMake文件时,打开对应网址并直接保存CTRL+S(不是将网页内容保存),会自动保存成CMake文件))
划重点:强烈建议去掉BUILD_EXAMPLES,BUILD_TESTS,BUILD_PERF_TESTS这个三个选项(这三个选项默认勾选),否则静态编译的示例程序非常大。
按照默认的CMAKELIST编译出来的项目,包含大量.lib和.dll文件,在开发opencv程序时,需要一一指定lib文件,并将所有dll复制到程序目录或设置到PATH环境变量里,非常不方便。CMake中有一个选项名为BUILD_opencv_world,默认是不勾选的,它可以把所有的组件综合到一个名为opencv_world310d.lib或opencv_world310.lib的文件中,使以后配置工程时输入此单一文件即可。
3.打开编译位置的openCV.sln,然后选择CmakeTargets里的INSTALL,右键”生成",即可以编译得到openCV的静态库,静态库的位置为“install——x86——vc14——staticlib"。
(后续我选择“生成——批生成”里的ISNTALL和ALL-INSTALL两项下32位的debug和release都审生成。在自己笔记本生成失败,查了下说是windows sdk版本低的原因,下载更新了新版本还是不行,在其他台式机上成功生成32位的动态库)
至此长舒一口气,终于和网上里的其他地方的对上了。但是其他网页上的步骤,很多没讲清楚,会让人误入歧途,浪费很多时间。
4.准备将项目代码生成静态库以供调用,使用openCV刚编译的staticlib。
4.1 将整个项目的C++和头文件放到一个文件夹下,再打开VS,”文件——新建——从现有代码创建项目“,选择静态库的编译,让最后生成的为LIB文件。
4.2 更改项目属性,”VC++目录“里的包含目录里填入”install\include"和“install\include\opencv2",库目录里添加进”install——x86——vc14——staticlib“,然后在"C/C++——代码生成”里更改“运行库”为"MTD“。
4.3 生成解决方案,就可以看到生成对应的**.lib文件。
5.调用该静态库。
5.1 新建项目,更改项目属性,按照4.1和4.2的步骤,在库目录里添加生成的lib文件的目录(建议将生成的**.lib拷贝到特定位置)
5.2 在"链接器——输入——附加依赖项“里填入staticlib库里的所有lib的全名,以及我们自己生成的**.lib名。
5.3 关键:在"C/C++——代码生成”里将运行库同样设置为MTD多线程调试。
6 生成解决方案,可以在项目里找到对应的exe文件。将调用项目里用到的资源(图片或文本)和生成的exe放在一起,拷贝到其他未安装openCV的电脑上,可以运行成功。