其实我是不怎么喜欢编译的,在opencv3 的时候,有编译好了的,我就直接下载使用了的。由于转到viausl studio 2017, 还用opencv3 就不好了,编译库只支持vc12。我还想下编译好了的opencv4, 但发现编译好了的只有x64版本,没有我需要的win32 版本。所以没办法只好自己下载源代码,编译。其中遇到些问题,这里做个总结,给你我一些帮助吧。
1:下载opencv 源代码并解压。https://opencv.org/opencv-4-0-0.html 是我的一个下载地址,其实我是google opencv 4 download找到的。应该也可以 baidu opencv 4 download 找到。
2:下载并安装好cmake , 我的电脑本来就装好了的,如果你没有,你就下一个安装吧,开源免费的。
3:下载并安装好visual studio 2017 或者其他较新的版本,我是本来就装好了的。
4:运行cmake, 上面一行输入源代码的地址,下面一行编译目标地址,如果没有建立好,config 的时候问你是否新建,那就yes。输入好这2行,就点Config,或者多点一回,第一次的时候,会问你选择编译器,当然就选你要的。要些时间才完成。完成后点Generate,产生编译工程。这很快,然后打开open project。
打开工程后,当然就是编译了,可以选择Debug 或者Release 2种。编译好了,就可以测试,建立一个应用程序。
5:碰到的问题
测试时发现没有 opencv_world400d.lib ,后来找来找去,问到说应该在cmake 时勾上world
我也找不到 这个选项,然后勾上Advanced , 在search 栏输入world。看到了吧,我的没有勾上,下面就是我勾上的图。
我重新编译,终于有了opencv_world400d.lib,但我测试时发现
1>opencv_ts400d.lib(ts_perf.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in load3DView.obj
原来编译库生成的是静态库,我把测试程序设置成静态库,可是编译的时候,又很多报错。
其实使用静态库的话,需要链接好些库
但我找不到动态库的版本。是不是cmake 有 dll 选项呢,没有。是不是叫share呢,果然是。
我在search 输入share 果然有这个选项,而且开始没有勾上。下面是勾上的结果。
这样再编译,就有了动态库的版本了。下面是编译后的目录结构,开始只有staticlib。
不确定的操作。在编译完成后,我选择install 工程为首选工程,单独编译,然后运行。不知道是不是这样,只是现在编译好了。
6:简单测试工程
新建一个工程,类型为:windows console application,然后用以下代码替代文件内容。imread 里的内容是图片文件的名字包含路径,你需要根据你的情况实际修改。
#include "pch.h"
#include "opencv2/opencv.hpp"
using namespace cv;
int main()
{
Mat image = imread("D://study//opencv//lena.jpg", 1);
namedWindow("Original Image", 1);
// Show stuff
imshow("Original Image", image);
// Wait until user press some key
waitKey();
return 0;
}
编译运行吗?不还要设置路径和链接库。
首先是路径, include 需要加选择 ..\install\include,lib需要加选择 ..\install\x86\vc15\lib。
工程选择动态类链接库。
包含库设置如下,就是需要linker->input 里的Additional Dependencies 里加入opencv_world400d.lib:
现在可以编译链接成功了,运行报错,需要把 .\install\x86\vc15\bin 下的opencv400d.dll 文件复制到程序运行的目录。
现在测试运行成功了。可以显示图片了。