20个基础到进阶版的OpenCV4.9.0趣味项目(C++版)(一)——打开USB相机并显示在窗口上
文章目录
前言

OpenCV(Open Source Computer Vision Library)在计算机图像和计算机视觉领域具有举足轻重的地位。它是一个开源的计算机视觉和机器学习软件库,提供了丰富的图像处理和视觉识别功能。
这个系列是面向没有CV基础,但又想要系统性学习CV框架并应用到自己的爱好或者工作的学生和工程师。你可以通过这20个趣味项目中,快速掌握基础到进阶的CV知识。
这20个项目涉及的内容有图像处理、图像分割、颜色匹配、人脸识别处理、人体姿态估计、人体语义分割、手势识别、图片上色、物体识别、文字识别等。在学习完这些内容后,自己可以根据自身需求去拓展更多的内容。
一、本节课的内容
学习如何使用OpenCV打开计算机的摄像头,捕获视频帧,并在窗口中实时显示这些帧。
二、环境准备
opencv4.9.0(GPU版本)
vs2019
win10
(以上安装方式不演示)
三、代码演示
包含必要的头文件:
<opencv2/opencv.hpp>这行代码的作用,它包含了OpenCV库的所有主要功能。
#include <opencv2/opencv.hpp>
声明需要显示图像的窗口:
"cam"为显示窗口的名字,这个接口的第二个参数能设置窗口属性,可根据需求进行设置,这里使用默认参数进行创建。
cv::namedWindow("cam");
初始化摄像头:
使用VideoCapture类创建摄像头对象,参数0通常表示计算机的默认摄像头。
检查摄像头是否成功打开,如果未打开则输出错误信息并退出程序。
cv::VideoCapture capture(0);
if (!capture.isOpened())
{
printf("无法打开摄像头!\r\n");
return -1;
}
捕获并显示视频帧:
在一个无限循环中,使用capture >> frame从摄像头捕获视频帧。
检查捕获的帧是否为空,如果为空则可能是摄像头被关闭或其他错误,跳出循环。
使用imshow函数在窗口中显示捕获的帧。
使用waitKey函数等待按键事件,并检查是否按下了Esc键(ASCII码为27),如果是则跳出循环。
while (1)
{
cv::Mat frame;
capture >> frame;
if (frame.empty())
break;
cv::imshow("cam", frame);
if (27 == cv::waitKey(27))
break;
}
实现代码
#include <iostream>
#include <opencv2/opencv.hpp>
int main()
{
cv::namedWindow("cam");
//初始化摄像头
cv::VideoCapture capture(0);
if (!capture.isOpened())
{
printf("无法打开摄像头!\r\n");
return -1;
}
while (1)
{
cv::Mat frame;
capture >> frame;
if (frame.empty())
break;
cv::imshow("cam", frame);
if (27 == cv::waitKey(27))
break;
}
return 0;
}
最终效果:窗口显示摄像头获取的图像

四、总结
一起来回顾这个项目的主要步骤:
1)创建显示窗口;
2)打开相机;
3)在循环中获取相机图像并显示在窗口;
4)要在循环中获取监听按键,方便退出循环。
在这里我也希望你能在这个项目基础上尝试修改代码,如添加图像处理功能或改进用户界面。
希望你能喜欢我的项目,来关注我吧!
(一)——打开USB相机并显示在窗口上&spm=1001.2101.3001.5002&articleId=142383694&d=1&t=3&u=f657928ab75b4080b3ccde946ce3d4d9)
6769

被折叠的 条评论
为什么被折叠?



