目录
1、VideoCapture类
2、视频属性get()
3、视屏文件保存
1、VideoCapture类
2、视频属性get()
3、视屏文件保存
//视频的读取保存
int test3()
{
VideoCapture video;
//video.open("F:/testMap/lolTFT.mp4");//读取视频
video.open(0);//读取摄像头
if (!video.isOpened())
{
cout << "打开失败,请检查摄像头或文件" << endl;
return -1;
}
cout << "视频帧率="<<video.get(CAP_PROP_FPS) << endl;
cout << "视频宽度=" << video.get(CAP_PROP_FRAME_WIDTH) << endl;
Mat img;
video >> img;//获取图像
//检测是否成功获取图像
if (img.empty())//判断有没有读取图像成功
{
cout << "没有获取到图像"<< endl ;
return -1;
}
bool isColpr = (img.type() == CV_8UC3);//判断相机(视频)类型是否为彩色
VideoWriter writer;
int codec = VideoWriter::fourcc('M', 'J','P','G'); //选择编码格式
double fps = 25.0;//设置视频帧率
string filename = "F:/testMap/live.avi";//保存的视频文件名称
writer.open(filename,codec,fps,img.size(),true);//创建保存视频文件的视频流
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;
}
//读取视频播放
//while (true)
//{
// Mat frame;
// video >> frame;//把视频当前帧传给frame
// if (frame.empty())
// {
// break;
// }
// imshow("video",frame);
// uchar c = waitKey(1000 / video.get(CAP_PROP_FPS) /2);//2倍速播放
// //按q退出
// if (c == 'q')
// {
// break;
// }
//}
}