/**********************************************************************************************************************
程序功能:
一个测试VideoCapture视频操作类的Demo
开发环境:
OpenCv2.4.8 + VS2012 + Halocn10.0 + Win10
时间地点:
陕西师范大学 2016.10.9
作者信息:
九月----马卫飞
***********************************************************************************************************************/
#include <stdio.h>
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
#define WINDOWNAME "【读取视频】"
/*************************************************【Main函数】*********************************************************
*模块说明:
* 控制台应用程序的入口,我们的程序从此块开始执行
**********************************************************************************************************************/
int main()
{
//【1】读入视频
cv::VideoCapture capture; //【1】首先,实例化一个VideoCapture类的类对象capture
capture.open(".\\Image\\1.avi"); //【2】然后,初始化这个类对象,将capture这个对象与打开的视频文件关联起来
//【2】测试视频文件是否成功打开
if(capture.isOpened())
{
std::cout<<"【帮助信息】视频文件成功打开"<<std::endl;
}
else
{
std::cout<<"【帮助信息】视频文件打开失败"<<std::endl;
}
//【3】获取视频相关信息---帧数 //【3】获取视频相关的属性信息,具体是什么信息,和参数宏有关
long iTotalFrame = capture.get(CV_CAP_PROP_FRAME_COUNT);
int iFrameHeight = capture.get(CV_CAP_PROP_FRAME_HEIGHT);
int iFrameWidth = capture.get(CV_CAP_PROP_FRAME_WIDTH);
std::cout<<"【帮助信息】这个视频总共包含的帧数 ="<<iTotalFrame<<std::endl;
std::cout<<"【帮助信息】帧图片的高度 ="<<iFrameHeight<<std::endl;
std::cout<<"【帮助信息】帧图片的宽度 ="<<iFrameWidth<<std::endl;
std::cout<<"【帮助信息】capture类对象的大小为 ="<<sizeof(capture)<<std::endl;
//【3】当VideoCapture类的类对象capture和视频文件关联起来之后,紧接着可以用一个循环,将每一帧显示出来
int iCount = 1;
while(1)
{
//【0】显示当前图片的帧号
std::cout<<"【帮助信息】输出当前的帧号 ="<<iCount<<std::endl;
//【1】实例化一个Mat类对象,用于存储每一帧的图像
cv::Mat frame;
//【2】将获取到的每一帧的图像写入frame这个类对象中
capture>>frame;
//【3】判断当前是否读取到图像文件,图像容器frame是否为空
if(!frame.empty())
{
cv::namedWindow(WINDOWNAME); //【1】创建一个图片的显示窗口
cv::imshow(WINDOWNAME,frame); //【2】显示当前帧的图片
//cv::waitKey(500); //【3】延时1000ms
}
else
{
break;
}
//【4】按下键盘上的Q键,退出
if(cv::waitKey(500)==27)
{
std::cout<<"进入循环体"<<std::endl;
//std::system("pause");
break;
}
iCount++;
}
std::system("pause");
return 0;
}
VideoCapture视频操作类的详细解读示例Demo
最新推荐文章于 2024-08-31 19:05:55 发布