1.读取并播放视频
#include<opencv2\opencv.hpp>
using namespace cv; //包含cv命名空间
/*int main()
{
VideoCapture capture("5.avi");//1.读入视频
while (1)//2.循环显示每一帧
{
Mat frame;//定义一个Mat变量,用于存储每一帧的图像
capture >> frame;//读取当前帧
若视频播放完成,退出循环
if (frame.empty())
{
break;
}
imshow("读取视频", frame);//显示当前帧
waitKey(30);//延时30毫秒
}
return 0;
}
2.调用摄像头采集图像
(1)采集图像
#include<opencv2\opencv.hpp>
using namespace cv; //包含cv命名空间
int main()
{
VideoCapture capture(0);//1.从摄像头读入视频
Mat edges;
while (1)//2.循环显示每一帧
{
Mat frame;//定义一个Mat变量,用于储存每一帧的图像
capture >> frame;//读取当前帧
imshow("读取视频", frame);//显示当前帧
waitKey(30);//延时30ms
}
return 0;
}
(2)增加边缘检测效果
int main()
{
VideoCapture capture(0);//1.从摄像头读入视频
Mat edges;
while (1)//2.循环显示每一帧
{
Mat frame;//定义一个Mat变量,用于储存每一帧的图像
capture >> frame;//读取当前帧
cvtColor(frame,edges, COLOR_BGR2GRAY);//原图转换为灰度图像
blur(edges, edges, Size(7, 7));
Canny(edges, edges, 0, 30, 3);
imshow("读取视频", frame);//显示当前帧
imshow("被Canny后的视频", edges);//显示经过处理后的当前帧
if( waitKey(30)>=0) break;//延时30ms
}
return 0;
}
注:摄像头调用:
只需要将视频文件改成摄像头ID(0)
3.视频保存
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv; //包含cv命名空间
using namespace std;
int main()
{
Mat img;
VideoCapture video(0);
//读取视频
//VideoCapture video;
//video.open("5.avi");
if (!video.isOpened())//判断是否调用成功
{
cout << "打开摄像头失败,请确认摄像头是否安装成功";
return -1;
}
video >> img;//获取图像
//检测是否成功获取图像
if (img.empty())
{
cout << "没有获得图像" << endl;
return -1;
}
bool isColor = (img.type() == CV_8UC3);//判断相机(视频)是否为彩色
VideoWriter writer;
int codec = VideoWriter::fourcc('M', 'j', 'p', 'G');//选择编码格式
//OpenCV 4.0版本设置编码格式
//int codec =CV_FOURCC('M', 'j', 'p', 'G');
double fps = 25.0;//设置视频文件名称
writer.open("C:/Users/86182/Desktop/list/test video.mp4", codec, fps, img.size(), isColor); //创建保存文件的视频流
if (!writer.isOpened())
{
cout << "打开视频文件失效,请确认是否合法输入" << endl;
return -1;
}
while (1)
{
//检测是否执行完毕
if (!video.read(img))
{
cout << "摄像头断开连接或者视频读取完成" << endl;
break;
}
writer.write(img);//把图像写入视频流
//writer<<img;
imshow("Live", img);
char c = waitKey(50);
if (c == 27)//按“ESC”键退出视频保存
{
break;
}
}
//退出程序时自动关闭视频流
//video.release();
//writer.release();
return 0;
}
其中,VideoCapture、imwriter和VideoWriter()用法如下:
VideoCapture(const string& filename,int apiPreference=CAP_ANY)
- filename:读取视频文件或者图像序列名称
- apiPreference:读取数据时设置的属性,例如编码格式、是否调用OpenNI等
imwriter(const String& filename,InputArray img,Const std::vector& params=std::vector() )
- filename:保存图像的地址和文件名,包含图像格式
- img:将要保存的Mat类矩阵变量
- params:保存图片格式属性设置标志
VideoWriter(const String& filename,int fourcc,double fps,Size framSize,bool isColor=true)
- filename:保存视频的地址和文件名,包含视频格式
- fourcc:压缩帧字符编解码器代码
- fps:保存视频的帧率,即视频中每秒图像的张数
- framSize:视频帧的尺寸
- isColor:保存视频是否为彩色视频