VideoCapture 类基础知识链接:https://blog.csdn.net/u010368556/article/details/79186992.
一、打开摄像头
/*
* API函数
*
1、virtual bool read(OutputArray image);
功能描述:抓取、解码并返回下一帧视频。
视频帧将从image返回,如果没有帧被抓取,图像将为空。
返回false,表示如果没有抓取帧
2、void flip(InputArray src, OutputArray dst, int flipCode);
功能描述:围绕垂直、水平或两个轴翻转图片。
参数 flipCode 指定如何翻转数组的标志; 0表示绕x轴翻转,
而正值(例如,1)表示绕y轴翻转。
负值(例如,-1)表示在两个轴上翻转。
*/
代码如下:
void QuickDemo::vedio_demo()
{
VideoCapture capture(0);
Mat frame;
while (true)
{
capture.read(frame);
flip(frame,frame,1);
//如果没有抓取到帧,就退出
if (frame.empty())
{
break;
}
imshow("frame",frame);
int c = waitKey(1);
if (c == 27)//按 ESC 退出
{
break;
}
}
//最后一定要release
capture.release();
}
运行结果:会打开摄像头
二、打开视频文件
void QuickDemo::vedio_demo()
{
VideoCapture capture("E:/BaiduNetdiskDownload/10__bmp图标显示.mp4");
Mat frame;
while (true)
{
capture.read(frame);
//如果没有抓取到帧,就退出
if (frame.empty())
{
break;
}
imshow("frame",frame);
//每间隔1ms就捕捉一次键盘输入
int c = waitKey(1);
if (c == 27)//按 ESC 退出
{
break;
}
}
//最后一定要release
capture.release();
}
运行结果:播放视频
拓展应用:
1、如果视频中有个人,其背景为绿幕,那就可以换他换背景。
2、可以用前面对图片的操作方法对视频进行处理(比如灰度、hsv色彩空间)。