1、打开视频文件
Video Capture cap(" ");
检查是否打开
.isOpened()
2、获取视频整个帧数
code1:针对AVI
long int numFrame=cap.get(CV_CAP_PROP_FRAME_COUNT);
code2:针对经转换过的视频IplImage *pImg=NULL;
int count=0;
while((pImg=cvQueryFrame(cap))!=NULL)
{count++;}
3、跳至100帧
double position=100.0;
capture.set(CV_CAP_PROP_POS_FRAMES,position);
4、获取帧率
double rate = capture.get(CV_CAP_PROP_FPS);
5、显示每一帧的窗口
namedWindow(" ");
6、每帧之间的延迟与视频帧率相对应int delay = 1000/rate;
7、读取下一帧capture.read(frame);//重复调用read
capture>>frame;//调用重载过的操作符
capture.grab();//捕获下一帧
capture.retrieve(*frame);//对该帧进行解码
8、窗口显示当前帧
imshow(" ",frame);
9、引入延迟
waitkey(int delay-0);
当delay<=0时永远等待,当delay>0时等待delay毫秒
返回按键ASCII码
10、按下按键后停留在当前帧等待下次按键(逐帧检验)
if(waitkey(delay)>=0)
waitkey(0);
11、通过按下指定按键停止
if((char)waitkey(delay)==27)
stop=true;
12、关闭视频文件(将由析构函数调用,非必须)
capture.release();
13、均值滤波处理
int kernel_size=3;
Mat kernel=Mat::ones(kernel_size,kernel_size,CV_32F)/(float)(kernel_size*kernel_size);
filter2D(frame, frame, -1, kernel); //卷积滤波程序