我是靠谱客的博主 苗条小甜瓜,最近开发中收集的这篇文章主要介绍opencv+vs2017 :三种方法实现视频的读取及播放,同时将每一帧图片保存在指定文件,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
第一种方法:
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 :三种方法实现视频的读取及播放,同时将每一帧图片保存在指定文件所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复