直接上代码。
// .h
#pragma once
#include <opencv2\highgui\highgui.hpp>
class VideoPlayer
{
public:
VideoPlayer();
~VideoPlayer();
int Play();
};
// .cpp
#include "stdafx.h"
#include "VideoPlayer.h"
VideoPlayer::VideoPlayer()
{
}
VideoPlayer::~VideoPlayer()
{
}
int VideoPlayer::Play()
{
CvCapture * capture = cvCreateFileCapture("D:\\Handwriting Beautification Using Token Means.mp4"); //读取视频
if (capture == NULL) {
printf("NO capture"); //读取不成功,则标识
return 1;
};
double fps = cvGetCaptureProperty(capture, CV_CAP_PROP_FPS); //读取视频的帧率
int vfps = 1000 / fps; //计算每帧播放的时间
printf("%5.1f\t%5d\n", fps, vfps);
double frames = cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT);//读取视频中有多少帧
printf("frames is %f\n", frames);
cvNamedWindow("example", CV_WINDOW_AUTOSIZE); //定义窗口
IplImage * frame;
while (1){
frame = cvQueryFrame(capture); //抓取帧
float ratio = cvGetCaptureProperty(capture, CV_CAP_PROP_POS_AVI_RATIO); //读取该帧在视频中的相对位置
printf("%f\n", ratio);
if (!frame)break;
cvShowImage("example", frame); //显示
char c = cvWaitKey(vfps);
if (c == 27)break;
}
cvReleaseCapture(&capture);
cvDestroyWindow("example");
return 0;
}
注意类的写法,很多c++语法都忘记了
比如play前面没有写上类名,就会出现 “无法编译的外部符号” 报错