第一种方法:
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;
if (capture.isOpened()) //判断视频是否成功打开
{
while (capture.grab()) //capture.grab() 从视频文件或捕获设备中抓取下一个帧,假如调用成功返回true。
{
capture >> frame;
frame = findTargetImg(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;
}
最后
以上就是苗条小甜瓜最近收集整理的关于opencv+vs2017 :三种方法实现视频的读取及播放,同时将每一帧图片保存在指定文件的全部内容,更多相关opencv+vs2017内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复