本文介绍了安装 Visual Studio 2022 和 OpenCV 和环境配置,并示例摄像头截帧并保存。本文的平台使用了 Windows 以及 Visual Studio 2022 的开发环境,此外使用了 OpenCV 3 进行示例(opencv-python 可以查看这个项目)。
安装 Visual Studio
首先在下列网址中下载最新版本的 Visual Studio 2022,然后进行安装,在模块选择界面选择所需的模块,此处我们须要选择【使用c++的桌面开发】。下载过程可能较为漫长,需要9-10GB的存储空间 。 https://visualstudio.microsoft.com/zh-hans/downloads/
下载 OpenCV
Visual Studio 2022 下载完成之后,我们需要下载 OpenCV,其安装包可以从下列网址下载。其中本文选择了【OpenCV v3.4.5】进行示例,其余版本亦可参照本文示例。
下载完成后得到一个 .exe 可执行文件,不过实际上就是一个自解压程序,双击安装之后,选择完安装路径,其开始解压。例如,我的解压目标文件夹是在 C 盘新建的一个叫 【opencv3】的文件夹。解压完成之后,该文件夹下面有一个叫做【opencv】的文件夹,该文件夹内含有【build 和 sources】两个子文件夹。
配置路径和库目录
配置路径可以告诉计算机 OpenCV 放置在哪里,首先启动 Visual Studio 2022,创建一个新的项目【创建新项目】,选择如下图的【控制台应用】,点击【下一步】并完成项目名称的重命名。
如上界面,完成项目的创建之后开始进行包含路径的配置。依次点击界面上方的【视图】→【其他窗口】→【属性管理器】,在右侧会出现【属性管理器】界面。双击【Release | x64】弹出 Release 属性页(如果想要使用 Debug 模式,则可点击其他菜单。)。
属性页中的【VC++目录】中的【包含目录】里添加两个文件路径(下面案例中使用了之前安装的 OpenCV 路径),分别是:
C:\opencv3\opencv\build\include
C:\opencv3\opencv\build\include\opencv2
在【库目录】中添加对应的目录路径(下面案例中使用了之前安装的 OpenCV 路径):
C:\opencv3\opencv\build\x64\vc15\lib
配置链接器
打开【库目录】路径(在本文中,即 C:\opencv3\opencv\build\x64\vc15\lib), lib 文件数目有两个,区别就是一个后面含有“d”,而另一个没有。不含有的文件是在 Release 模式下使用,配置该模式的时候才使用;含有“d”的文件是在 Debug 模式下使用的。打开链接器左侧的三角形,在【输入】项中的【附加依赖项】添加 opencv_world345.lib
(由于我们下载的 OpenCV 包为 v3.4.5),即可完成链接器的配置。
配置环境变量
直接在 Windows的左下角搜索【高级系统设置】,进入系统属性界面。在系统属性界面内选择【环境变量】,并在新跳转出的页面中的【系统变量】部分找到【Path】变量。
C:\opencv3\opencv\build\x64\vc15\bin
在配置完成后需要重启 Visual Studio 才可以在程序中加载 OpenCV 的头文件。现在可以尝试使用下面这个代码进行测试 OpenCV 是否配置完成。
注意:在引入库文件处,需要导入一个名为【#include <bits/stdc++.h>】的库,它是 C++ 中支持的一个几乎万能的头文件,几乎包含所有的可用到的 C++ 库函数,该库需要我们自行创建,详情可以查看这篇文章:https://www.cnblogs.com/blogxjc/p/11130843.html 。
即在该路径(C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.31.31103\include\bits
(示例)。如何得到该路径:右键任意开头处的库文件,点击【查看代码】,在跳转出来的界面上,点击【打开文件所在位置】。)下新建一个文件【stdc++.h】。
OpenCV 摄像头截帧并保存
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <bits/stdc++.h>
#include<windows.h>
using namespace cv;
using namespace std;
int weigth;
int height;
static int seat = 0;
static int imgnum = 0;
int wait_time;
Mat input_image;
void SetCam(int weigth, int height, int wait_time)
{
string a = "0";
string Error;
VideoCapture cam(0);
/*设定缓冲区大小*/
//cam.set(CV_CAP_PROP_FRAME_WIDTH, weigth);
//cam.set(CV_CAP_PROP_FRAME_HEIGHT, height);
while (!cam.isOpened())
{
Error = "cannot open the camera1!";
}
namedWindow("摄像头");
while (true)
{
cam >> input_image; //将影像传入图片
imshow("input_image", input_image);
String imgnum_str = to_string(imgnum);
imwrite("C:/opencv_img_output/inputimage_" + imgnum_str + ".bmp", input_image);
imgnum += 1;
//Save(i, 20);
// while(1){ if(waitKey(100)==27)break; } 在这个程序中,我们告诉OpenCv等待用户触发事件,等待时间为100ms,
// 如果在这个时间段内, 用户按下ESC(ASCII码为27),则跳出循环,否则,则跳出循环
if (27 == waitKey(wait_time))
break;
}
return;
}
void main()
{
//char* error = "error";
cout << "OpenCV C++ 摄像头间隔截帧(请先新建文件夹 C:/opencv_img_output/)" << endl << endl;
cout << "请输入摄像头截帧间隔(单位:毫秒):"
<< endl;
cin >> wait_time;
cout << "请输入摄像头画面高度:"
<< endl;
cin >> height;
cout << "请输入摄像头画面宽度:"
<< endl;
cin >> weigth;
while (true)
{
SetCam(weigth, height, wait_time);
}
return;
}
下一步可以将这个控制台程序打包成 【.exe 可执行文件】,这样可以更方便地在 Windows 平台上使用。
参考资料
- https://zhuanlan.zhihu.com/p/86781438 【从零学习OpenCV 4】Windows系统中安装OpenCV 4
- https://blog.csdn.net/chaipp0607/article/details/70185531 OpenCV 3.1 imwrite()函数写入异常问题解决方法
- https://docs.microsoft.com/zh-cn/cpp/get-started/tutorial-console-cpp?view=msvc-170 用 C++ 创建控制台计算器
- https://zhuanlan.zhihu.com/p/399465874 C/C++可执行文件.exe打包详细步骤