win64+vs2017+cmake编译opencv3.4.7
写在前面:嫌麻烦不想自己编译opencv的,可以直接下载我编译好的结果,然后直接跳到第5步,就可以把opencv用起来了。下载链接如下:
链接:https://pan.baidu.com/s/1BEXhapUFbcvXu8b2y95m3A
提取码:znzy
1.Windows下安装CMake
环境:Windows 10,64 位操作系统
CMake下载地址:https://cmake.org/download/或者https://github.com/Kitware/CMake/releases,第2个链接可以下载到老版本的CMake,我在第2个链接下载了3.8.2版本。我上传到了百度网盘,下载地址如下:
链接:https://pan.baidu.com/s/1FA71BORLrWxcK66279Vt5w
提取码:bl7k
下载下来的文件如下图所示,双击进行安装。
点击next
按快捷键win + r,然后输入cmd,打开命令行窗口。输入命令查看cmake的版本,可以正确打印版本信息,表示cmake安装成功。
2.opencv下载
OpenCV – 3.4.7下载链接:https://opencv.org/releases/page/3/
点击sources,开始下载文件,下载好的文件如下图。我上传到了百度网盘,下载地址如下:
链接:https://pan.baidu.com/s/1hKQIiX2OHX2wtksZ9CF6LQ
提取码:9je3
opencv_contrib-3.4.7下载链接:https://github.com/opencv/opencv_contrib/tree/3.4.7
点击download zip,开始下载文件,下载好的文件如下图。我上传到了百度网盘,下载地址如下:
链接:https://pan.baidu.com/s/1tilglFZnkfnG-uGCT9TC-g
提取码:uz11
3.VS下载
vs2017社区版安装包下载地址:
链接:https://pan.baidu.com/s/1-Q3gyS_HFUBPFOrs96fn4A
提取码:v876
4.使用cmake编译opencv
新建一个命名为opencv的文件夹,将opencv-3.4.7.zip和opencv_contrib-3.4.7.zip解压到该文件夹,并新建一个命名为build的文件夹,如下图。
运行cmake,按下图填写两个目录,where is the source code:选择opencv源码目录,where to build the binaries:选择build目录。点击configure,弹出对话框,选择2017 win64,点击finish,即开始配置。
完成第一次配置后,出现如下画面,有很多行显示为红色,说明有问题,是因为有一些文件下载失败了,解决方案是手动下载。打开build文件夹中的CMakeDownloadLog.txt,可以看到哪些文件下载失败了,也可以知道手动下载这些文件后、应该放到哪个文件夹。以"boostdesc_bgm_bi.i"为例,下载完成后,放到这里:“D:/software/opencv/build/downloads/xfeatures2d/boostdesc_bgm_bi.i”;然后将"boostdesc_bgm_bi.i"复制一份,并把文件名改成"232c966b13651bd0e46a1497b0852191-boostdesc_bgm_bi.i",放到这里:“D:/software/opencv/opencv-3.4.7/.cache/xfeatures2d/boostdesc/232c966b13651bd0e46a1497b0852191-boostdesc_bgm_bi.i”。
所有下载失败的文件都完成以上操作以后,在cmake的界面中,勾选build_opencv_world和build_examples;设置opencv_extra_modules_path:opencv_contrib-3.4.7下的modules文件夹。
点击configure,如果出现了文件下载失败的情况,解决方案和之前是一样的。处理好所有下载失败的文件以后,点击generate,结果如下。
generating done以后,打开我们最初新建的build文件夹,可以看到有一个名为OpenCV.sln的文件,使用vs2017打开OpenCV.sln。
vs2017中选择debug,x64。右键点击“解决方案opencv”,然后选择重新生成解决方案。
找到CMakeTargets下的INSTALL,右键点击INSTALL,选择仅用于项目–>仅生成INSTALL。
vs2017中选择release,x64,将上述过程重复一遍。
5.测试opencv
首先设置环境变量,设置好以后需要重启电脑。
打开vs2017,点击:文件–>新建–>项目,选择空项目,确定。
点击:视图–>其他窗口–>属性管理器。右键点击debug|x64,点击属性。在vc++目录中,设置包含目录和库目录及附加依赖项,如下图所示。
在解决方案资源管理器中,新建源文件,编写opencv调用笔记本自带摄像头并显示的代码。
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int, char**)
{
Mat frame;
VideoCapture cap(0 + cv::CAP_DSHOW);
// 打印默认分辨率,我这里是640*480
double default_width = cap.get(cv::CAP_PROP_FRAME_WIDTH);
double default_height = cap.get(cv::CAP_PROP_FRAME_HEIGHT);
printf("default infos: default_width = %lf, default_height = %lf\n", default_width, default_height);
// 我的笔记本电脑自带的摄像头分辨率是100w的,高于默认分辨率,这里修改一下分辨率
cap.set(cv::CAP_PROP_FRAME_WIDTH, 5000);
cap.set(cv::CAP_PROP_FRAME_HEIGHT, 5000);
// 打印修改后的分辨率,我这里是1280*720
double changed_width = cap.get(cv::CAP_PROP_FRAME_WIDTH);
double changed_height = cap.get(cv::CAP_PROP_FRAME_HEIGHT);
printf("changed infos: changed_width = %lf, changed_height = %lf\n", changed_width, changed_height);
// 检查摄像头是否打开
if (!cap.isOpened()) {
cerr << "ERROR! Unable to open camera\n";
return -1;
}
cout << "Start grabbing" << endl << "Press Esc to terminate" << endl << "Press s to save the image" << endl;
for (;;)
{
// wait for a new frame from camera and store it into 'frame'
cap.read(frame);
// check if we succeeded
if (frame.empty()) {
cerr << "ERROR! blank frame grabbed\n";
break;
}
// show live and wait for a key with timeout long enough to show images
imshow("Live", frame);
int value = waitKey(5);
// 小写s的ASCII码是27
if (value == 27)
break;
// Esc的ASCII码是115
if (value == 115)
imwrite("shot.jpg", frame);
}
// the camera will be deinitialized automatically in VideoCapture destructor
return 0;
}