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

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)要在循环中获取监听按键,方便退出循环。
在这里我也希望你能在这个项目基础上尝试修改代码,如添加图像处理功能或改进用户界面。

希望你能喜欢我的项目,来关注我吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值