手把手练习--cmake+VS2015编译OpenCV3.3源码(x86版本)
1:首先下载OpenCV3.3.0的源码:
2:解压源码包opencv-3.3.0.zip,【点击"解压当前文件夹"】:,为了以下方便说明,这里以F:\opencv-3.3.0为例:
查看源码包,在文件夹下3rdparty【就是需要的第三方的库】,但是第三方库 ffmpeg 和 ippicv是空的,
在用cmake配置编译时,有些需要联网下载,并保存在源但是往往会下载很慢,所以可以提前下载好,放进对应的文件夹即可,这个对应的文件夹是源码文件夹下的.cache文件夹,需要新建,即在F:\opencv-3.3.0下新建.cache文件夹,注意不要鼠标右键新建文件夹,建立不了前缀名是"."的文件夹,需要用命令行,> md .cache
即可新建。
然后在.cache文件夹下,新建ffmpeg和ippicv文件夹。以下详细介绍下载动态库。
3:下载对应的ffmpeg的动态库:
打开文件夹ffmpeg下的ffmpeg.cmake文件,会看到有一个第一行,我们需要下载master_20170704
打开https://github.com/opencv/opencv_3rdparty/branches/all,找到对应的名字:
然后下载,解压后,将以下三个文件复制到F:\OpenCV-3.3.0/.cache/ffmpeg文件夹下:
同时将这三个复制到源码的文件夹F:\opencv-3.3.0\3rdparty\ffmpeg下,只是为了后期配置编译的更快。
4:下载ippicv
与上述步骤类似,打开\opencv-3.3.0\3rdparty\ippicv\ippicv.cmake文件:
需要下载后缀是20170418的包,解压后,会看到看到几个不同平台下的压缩包:
比如这里需要编译x86版本的,将ippicv_2017u2_win_ia32_20170418.zip复制到到F:\opencv-3.3.0\.cache\ippicv文件夹下,然后注意要重命名,加上改.zip的hash码,那么怎么查看该.zip的hash码呢?同样打开\opencv-3.3.0\3rdparty\ippicv\ippicv.cmake文件,
把ippicv_2017u2_win_ia32_20170418.zip的文件名字,改为以下,即在前面加上它对应的HASH码:
这样点.cache文件夹下的两个文件夹都已经完成了。
5:电脑上需要安装Python3.X否则会有以下提示:
再编译过程需要python3.X版本
6:打开cmake
即以以下为例:
为了快速编译将源码包中的文件夹3rdparty整个复制到F:\OpenCV3.3Build文件夹下,
然后点击“Configure”按钮:
等一两分钟后,等待配置完成:
然后再点击"Configure"按钮
点击“Generate”,
可以关闭'CMake"。
7:打开编译后的文件夹F:\OpenCV3.3Build
打开OpenCV.sln,然后点击Build Solution:
需要等待几分钟:
最后会出现以下界面
,这个时候x86版的Debug版本已经编译成功,生成的动态库、共享库、可执行文件在文件夹F:\OpenCV3.3Build\bin\Debug下
打开该文件夹查看生成的动态库
第8步:点击"INSTALL"->Project Only Build Only INSTALL
然后在F:\OpenCV3.3Build下自动生成一个install文件夹,文件夹下保存了OpenCV的头文件和x86 Debug模式下的
动态库和共享库
打开x86文件夹,
打开vc14文件夹
lib文件夹:
可以看到有一个是opencv_dnn330d.lib即深度学习的共享库
9:编译x86的release版本
点击Build->Build Solution,通以上编译Debug版本类似,需要等待几分钟,。
然后,这时查看F:\OpenCV3.3Build\bin下的Release文件夹下已经生成好动态库
同样点击:
等几秒钟
然后查看F:\OpenCV3.3Build\install\x86\vc14\lib多了一些文件名不带"d"的共性库文件
10:测试使用
- #include<iostream>
- #include<string>
- #include<opencv2\core\core.hpp>
- #include<opencv2\highgui\highgui.hpp>
- #include<opencv2\imgproc\imgproc.hpp>
- using namespace cv;
- using namespace std;
- int main(int argc,char*argv[])
- {
- Mat img = cv::imread(argv[1], cv::IMREAD_COLOR);
- imshow("as", img);
- waitKey(0);
- return 0;
- }