本文介绍了安装 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/

在 Windows 中安装 Visual Studio 2022 和 OpenCV  摄像头截帧并保存
在 Windows 中安装 Visual Studio 2022 和 OpenCV  摄像头截帧并保存

下载 OpenCV

Visual Studio 2022 下载完成之后,我们需要下载 OpenCV,其安装包可以从下列网址下载。其中本文选择了【OpenCV v3.4.5】进行示例,其余版本亦可参照本文示例。

在 Windows 中安装 Visual Studio 2022 和 OpenCV  摄像头截帧并保存

下载完成后得到一个 .exe 可执行文件,不过实际上就是一个自解压程序,双击安装之后,选择完安装路径,其开始解压。例如,我的解压目标文件夹是在 C 盘新建的一个叫 【opencv3】的文件夹。解压完成之后,该文件夹下面有一个叫做【opencv】的文件夹,该文件夹内含有【build 和 sources】两个子文件夹。

在 Windows 中安装 Visual Studio 2022 和 OpenCV  摄像头截帧并保存

配置路径和库目录

配置路径可以告诉计算机 OpenCV 放置在哪里,首先启动 Visual Studio 2022,创建一个新的项目【创建新项目】,选择如下图的【控制台应用】,点击【下一步】并完成项目名称的重命名。

在 Windows 中安装 Visual Studio 2022 和 OpenCV  摄像头截帧并保存
在 Windows 中安装 Visual Studio 2022 和 OpenCV  摄像头截帧并保存

如上界面,完成项目的创建之后开始进行包含路径的配置。依次点击界面上方的【视图】→【其他窗口】→【属性管理器】,在右侧会出现【属性管理器】界面。双击【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
在 Windows 中安装 Visual Studio 2022 和 OpenCV  摄像头截帧并保存

配置链接器

打开【库目录】路径(在本文中,即 C:\opencv3\opencv\build\x64\vc15\lib), lib 文件数目有两个,区别就是一个后面含有“d”,而另一个没有。不含有的文件是在 Release 模式下使用,配置该模式的时候才使用;含有“d”的文件是在 Debug 模式下使用的。打开链接器左侧的三角形,在【输入】项中的【附加依赖项】添加 opencv_world345.lib(由于我们下载的 OpenCV 包为 v3.4.5),即可完成链接器的配置。

在 Windows 中安装 Visual Studio 2022 和 OpenCV  摄像头截帧并保存

配置环境变量

直接在 Windows的左下角搜索【高级系统设置】,进入系统属性界面。在系统属性界面内选择【环境变量】,并在新跳转出的页面中的【系统变量】部分找到【Path】变量。

  • C:\opencv3\opencv\build\x64\vc15\bin
在 Windows 中安装 Visual Studio 2022 和 OpenCV  摄像头截帧并保存

在配置完成后需要重启 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】。

在 Windows 中安装 Visual Studio 2022 和 OpenCV  摄像头截帧并保存

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;
}
在 Windows 中安装 Visual Studio 2022 和 OpenCV  摄像头截帧并保存

下一步可以将这个控制台程序打包成 【.exe 可执行文件】,这样可以更方便地在 Windows 平台上使用。

参考资料

类似文章

发表评论

您的电子邮箱地址不会被公开。