opencv读取MP4文件和摄像头数据
@TOC
前言
本篇文章来讲解opencv读取MP4文件和摄像头数据,opencv主要用于处理图像数据那么本篇文章就来讲解opencv读取MP4文件和摄像头数据。
一、waitKey函数
waitKey()函数是OpenCV中常用的一个函数,它用于等待用户按键输入,并返回用户按下的键值。下面我将为您详细解释waitKey()函数的功能和使用。
waitKey()函数的基本语法如下:
int waitKey(int delay = 0);
参数说明:
delay:表示等待按键的时间(以毫秒为单位)。默认值为0,表示无限等待用户按键。如果设置一个正整数值,等待指定时间后会自动返回。
waitKey()函数的返回值是一个整数,表示用户按下的键值。通常情况下,我们会将返回值与用户可能按下的按键进行比较,以执行相应的操作。
二、VideoCapture类
VideoCapture类是OpenCV中用于从视频文件或摄像头中读取视频流的类。它提供了一系列函数和方法,使您能够读取视频流的帧并进行处理。下面我将为您详细解释VideoCapture类及其常用函数。
VideoCapture类的基本语法如下:
VideoCapture video("filename"); // 从文件中读取视频流
VideoCapture video(deviceID); // 从摄像头设备中读取视频流
参数说明:
filename:表示要读取的视频文件的路径。
deviceID:表示要读取的摄像头设备的索引。通常,0表示默认摄像头设备。
VideoCapture类的常用函数如下:
1.isOpened():检查视频流是否成功打开。
if (video.isOpened())
{
// 视频成功打开
}
2.read():读取视频流的下一帧。
Mat frame;
video.read(frame); // 将下一帧视频存储在Mat对象中
3.set(CAP_PROP_X, value):设置视频流的属性。
video.set(CAP_PROP_FRAME_WIDTH, 640); // 设置帧宽度为640
video.set(CAP_PROP_FRAME_HEIGHT, 480); // 设置帧高度为480
4.get(CAP_PROP_X):获取视频流的属性值。
double width = video.get(CAP_PROP_FRAME_WIDTH); // 获取帧宽度
double height = video.get(CAP_PROP_FRAME_HEIGHT); // 获取帧高度
5.release():释放视频流资源。
video.release();
读取MP4文件:
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
VideoCapture video("1.mp4");
if (!video.isOpened())
{
printf("Failed to open video file.\n");
return -1;
}
while (1)
{
Mat frame;
if (!video.read(frame))
break;
// 处理视频帧
imshow("Frame", frame);
if (waitKey(30) == 27)
break;
}
video.release();
return 0;
}
读取摄像头数据:
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
VideoCapture vcaptrue;
Mat mpic;
vcaptrue.open(1);//打开摄像头
if (!vcaptrue.isOpened())
{
return -1;
}
while (1)
{
vcaptrue >> mpic;
imshow("读取摄像头数据", mpic);
waitKey(40);
}
return 0;
}
运行效果:
保存读取到的图形:
使用imwrite就可以将图片保存下来了:
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
//读取mp4文件
VideoCapture vcaptrue;
Mat mpic;
vcaptrue.open(0);
int id = 0;
if (!vcaptrue.isOpened())
{
return -1;
}
while (1)
{
vcaptrue >> mpic;
imshow("读取摄像头数据", mpic);
if (waitKey(20) == 32)//按下空格保存图片
{
string picname = to_string(id) + ".jpg";
id++;
imwrite(picname, mpic);
}
}
return 0;
}
按下空格后保存图片:
总结
本篇文章就讲解到这里,下篇文章继续我们的opencv。
- 点赞
- 收藏
- 关注作者
评论(0)