#include "highgui.h"
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
cvNamedWindow("视频播放器", CV_WINDOW_AUTOSIZE);
//参数可以是设备的索引号,或者是一个视频文件。设备索引号就是在指定要使用的摄像头。
//一般的笔记本电脑都有内置摄像头。所以参数就是 0。你可以通过设置成 1 或者其他的来选择别的摄像头。
// 用cvCaptureFromAVI()跟cvCaptureFromFile()、cvCreateFileCapture()都是一样的作用
CvCapture* capture = cvCreateFileCapture(".\\video1.mp4"); //获取视频
IplImage* frame;
int i = 0;
char image_name[25];
int pos = 0;
int pos1 = 0;
while (1)
{
cvSetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES, pos);
cout << pos; frame = cvQueryFrame(capture); //获取一帧图片,将其显示
pos1 = cvGetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES);
cout << "\t" << pos1 << endl;
if (!frame) break;
cvShowImage("视频播放器", frame); //显示每一帧
sprintf(image_name, "%s%.4d%s", ".\\tutu15\\", ++i, ".jpg");//保存的图片名
cvSaveImage(image_name, frame); //保存一帧图片
char c = cvWaitKey(33);
if (c == 27) break;
pos += 12; // 快进,每隔12帧显示一帧图片
}
cvReleaseCapture(&capture);
cvDestroyWindow("视频播放器");
system("pause");
}
读取视频并播放的另一种方法:
#include "stdafx.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
void main()
{
//VideoCapture capture(0);
VideoCapture capture("video1.mp4");
Mat frame;
while (capture.isOpened())
{
capture >> frame;
// capture.read(fram); //另一种获取帧的方式
imshow("video", frame);
if (cvWaitKey(20) == 27) //资料说明,在显示图像的时候,每秒显示27、28帧的时候,我们看到的视频是流畅的
{
break;
}
}
waitKey(0);
}
第三种方法:
using namespace cv;
int main(int argc,char *argv[])
{
VideoCapture cap(0);//打开默认的摄像头
if(!cap.isOpened())
{
return -1;
}
Mat frame;
bool stop = false;
while(!stop)
{
cap.read(frame); // 或cap>>frame;
imshow("Video",frame);
if(waitKey(30)==27) //Esc键退出
{
stop = true;
}
}
return 0;
}