opencv读取视频并保存为图片

1.功能:

     opencv读取指定文件夹中的视频文件,按照一定的间隔截取某些帧,将这些帧图像连续命名,存储在指定文件夹里。

2.代码如下:

(1)IplImage

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cv.h>
#include <highgui.h>void Video_to_image(char* filename,char * outfile, int interval)
{//初始化一个视频文件捕捉器CvCapture* capture = cvCaptureFromAVI(filename);//获取视频帧数信息cvQueryFrame(capture);int numFrames = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT);//视频帧数//printf("frame numbers : %d/n",numFrames);//定义和初始化变量int thisframe = 0;IplImage* img = 0;char image_name[100];//用来存储保存的图片名字while(1){img = cvQueryFrame(capture); //获取一帧图片if (!img || thisframe >= numFrames)//若图像为空或超出总帧数跳出,则跳出{break;}if (thisframe % interval == 0){sprintf(image_name,"%s%s%d%s", outfile,"image", thisframe, ".jpg");//保存的图片名cvSaveImage(image_name, img);   //保存一帧图片}thisframe++;}cvReleaseCapture(&capture);cvReleaseImage(&img);
}
int main()
{char filename[100] = "E://C_pagram//readvideo//readvideo//readvideo//Wildlife.wmv";char outfile[100] = "E://C_pagram//readvideo//readvideo//data//";int interval = 10;//设置间隔Video_to_image(filename,outfile, interval); //输入视频文件路径及名称、帧间隔return 0;
}

(2)Mat

#define _CRT_SECURE_NO_DEPRECATE#include <iostream>  
#include "cv.h"  
#include "opencv2/opencv.hpp"  using namespace std;
using namespace cv;// 描述:将视频帧转成图片输出  
void main()
{// 获取视频文件  VideoCapture cap("E:\\C_pagram\\readvideo\\readvideo\\Wildlife.wmv");// 获取视频总帧数  long totalFrameNumber = cap.get(CV_CAP_PROP_FRAME_COUNT);cout << "total frames: " << totalFrameNumber << endl;//输出总帧数Mat frame;bool flags = true;long currentFrame = 0;while (flags){// 读取视频每一帧  cap.read(frame);stringstream str;str << "_" << currentFrame << ".jpg";// 设置每50帧获取一次帧  if (currentFrame % 50 == 0 && !frame.empty())//当图片不为空时保存{// 将帧转成图片输出  imwrite("E:\\C_pagram\\readvideo\\readvideo\\data\\image" + str.str(), frame);}// 结束条件  if (currentFrame >= totalFrameNumber){flags = false;}currentFrame++;}system("pause");
}

3.注意

(1)输入文件路径时,用//或者\都可以;

(2)sprintf里面图片名称可以组合起来,用逗号隔开,其中 outfile已经是字符串的格式,不用加双引号;

(3)if (!img) {break;}这句判断没加之前导出的图片最后一张是空的;

(4)局部定义IplImage* img = 0;就局部释放该指针cvReleaseImage(&img);

(5)程序(2)输出的第一张图为全黑的不为空,最后一张图为空,加上判断可以去掉最后一张空图;

      if (currentFrame % 50 == 0 && !frame.empty())若不为空,保存

      if (currentFrame % 50 == 0 && frame.data)若frame的data有数据,保存

     以上两种方法都可以。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352006.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将Jython嵌入到您的Java代码库中

Jython是一个使用相当可靠的语法的快速Java脚本的好工具。 实际上&#xff0c;当使用jmx为您的Java应用程序实现一些维护或监视脚本时&#xff0c;它的运行效果非常好。 如果您与其他具有python背景的团队合作&#xff0c;则将python集成到您的java应用程序是绝对有意义的。 …

C语言的编译链接过程详解

学过C语言的人都应该知道&#xff0c;我们所编辑的C语言程序是不能直接放到机器上运行的&#xff0c;它只不过是一个带".c"后缀的文件&#xff08;也称为源代码&#xff09;而已&#xff0c;需要经过一定的处理才能转换成机器上可运行的可执行文件。我们将对C语言的这…

python 谷歌登录_用Python登录Gmail并发送Gmail邮件的教程

这篇快文介绍了使用Gmail作为您的e-mail服务器&#xff0c;通过Python的内置SMTP库发送电子邮件。它并不复杂&#xff0c;我保证。下面是如何在Python中登录GMail&#xff1a;import smtplib# The below code never changes, though obviously those variables need values.ses…

Linux wget命令详解

wget是一个下载文件的工具&#xff0c;它用在命令行下。对于Linux用户是必不可少的工具&#xff0c;我们经常要下载一些软件或从远程服务器恢复备份到本地服务器。 wget支持HTTP&#xff0c;HTTPS和FTP协议&#xff0c;可以使用HTTP代理。所谓的自动下载是指&#xff0c;wget可…

opencv连续读图

1.功能利用opencv连续读取指定文件夹中连续命名的图像&#xff0c;可以根据需要设置图像的命名间隔和图像的个数。 2.代码 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> int main(int …

在要求输入数字处找到非数字字符_剑指 Offer 67. 把字符串转换成整数 leetcode 剑指offer系列...

点击专辑上方“蓝字”关注我吧题目难度: 中等原题链接[1]今天继续更新剑指 offer 系列, 老样子晚上 6 点 45 分准时更新公众号 每日精选算法题, 大家记得关注哦~ 另外在公众号里回复 offer 就能看到剑指 offer 系列当前连载的所有文章了题目描述写一个函数 StrToInt&#xff0c…

旅行商问题的n种解法

问题描述&#xff1a; 旅行商问题&#xff08;Traveling Salesman Problem,TSP&#xff09;是旅行商要到若干个城市旅行&#xff0c;各城市之间的费用是已知的&#xff0c;为了节省费用&#xff0c;旅行商决定从所在城市出发&#xff0c;到每个城市旅行一次后返回初始城市&…

将字符串中的指定字符全局替换

// 将 str 中的 a 替换为 Avar str abcabcabc;var result str.replace(a, A);console.log(result: result); // 输出 result:Abcabcabc // 将str 中所有的 a 替换为 Avar str abcabcabc;var result str.replace(/a/g, A);console.log(result: result); // 输出 result:…

Lintcode--5(37)--反转一个三位数

1、题目反转一个只有3位数的整数。123 反转之后是 321。900 反转之后是 9。 2、我的解答 class Solution { public:/*** param number: A 3-digit number.* return: Reversed number.*/int reverseInteger(int number) {int num[3] {0};int result;num[1] number/100;num[2] …

java未检查异常_Java中已检查和未检查的异常

java未检查异常Java有两种类型的异常-已检查和未检查。 简而言之&#xff0c;选中的是指开发人员可以从异常中合理恢复的情况&#xff0c;而未选中的异常是无法处理的编程错误。 本文介绍了何时使用哪种。 但这不是那么简单–受检查的异常使代码变得“丑陋”。 它们迫使开发人员…

python清空列表clear_如何在Python中清空列表?

似乎很“肮脏”以这种方式清空列表&#xff1a;while len(alist) > 0 : alist.pop()是否存在明确的方法&#xff1f;#1楼list []将list重置为空列表。请注意&#xff0c;通常您不应list_保留的函数名称&#xff0c;例如list &#xff0c;它是列表对象的构造函数-例如&#…

linux shell 自定义函数(定义、返回值、变量作用域)介绍

linux shell 可以用户定义函数&#xff0c;然后在shell脚本中可以随便调用。下面说说它的定义方法&#xff0c;以及调用需要注意那些事项。 一、定义shell函数(define function) 语法&#xff1a; [ function ] funname [()] { action; [return int;] } 说明&#xff1a; …

Lintcode--6(767)--翻转数组

1、题目描述原地反转给定的数组&#xff0c;原地意味着你不能使用额外的空间。 2、AC程序 &#xff08;1&#xff09;利用C自带的函数 class Solution { public:void reverseArray(vector<int> &nums) {reverse(nums.begin(),nums.end());} }; &#xff08;2&#xf…

CPU时间分片、多线程、并发和并行

1、CPU时间分片、多线程&#xff1f; 如果线程数不多于CPU核心数&#xff0c;会把各个线程都分配一个核心&#xff0c;不需分片&#xff0c;而当线程数多于CPU核心数时才会分片。 2、并发和并行的区别 并发&#xff1a;当有多个线程在操作时,如果系统只有一个CPU,把CPU运行时间…

如何在Java中实现线程池

线程是独立程序的执行路径。 在java中&#xff0c;每个线程都扩展java.lang.Thread类或实现java.lang.Runnable。 多线程是指在一个任务中同时执行两个或多个线程。在多线程中&#xff0c;每个任务可以具有多个线程&#xff0c;并且这些线程可以异步或同步地并行运行。 您可以…

html选择按键点击后锁死输入框_js实现的键盘开启大写锁定提示和密码显示与隐藏的效果...

不知道大家注意到没有&#xff0c;很多人性话的网站再输入密码的时候&#xff0c;如果开启大写锁定下过(切换键A左边的Cap Lock按键)&#xff0c;那么就会给出一个提示&#xff0c;因为很多时候密码验证是区分大小写的&#xff0c;如果不小心开启或者关闭大小写就有可能导致输入…

vim ctags使用方法

windows下很多人都使用source insight 编写和查看代码。linux下可以使用VIM&#xff0c;刚开始会觉得VIM像windows下的记事本&#xff0c;而如果使用得当&#xff0c;它并不比source insight 逊色。在这里&#xff0c;我会尽我所能细致地讲清楚如何把vim变成source insight, 然…

MATLAB读取txt文件的数据

常用的主要有以下几种方法&#xff1a; 1、loadData load("filename.txt");该函数只能加载仅含有数字的文本文件&#xff0c;如果文档中夹杂着字母或者文字&#xff0c;就会报错。 2、importdataData importdata("filename.txt");既可以读取数据又可以读…

谷歌guava_Google Guava v07范例

谷歌guava我们在TouK举办了一个名为“每周技术研讨会”的活动&#xff0c;即每个星期五的16:00&#xff0c;每个愿意参加的人都有一个演讲。 我们展示了我们在家学习和学习的东西&#xff0c;但是我们还设有一个公告板&#xff0c;上面有人们想听的话题。 上周MaciejPrchniak谈…

arduinoesp8266定时器_ESP8266深度睡眠与Arduino IDE(NodeMCU)

本指南展示了如何使用Arduino IDE与ESP8266(NodeMCU)一起使用深度睡眠。我们将使用定时器唤醒来唤醒深度睡眠&#xff0c;并使用复位(RST)引脚来唤醒外部唤醒。引入深度睡眠模式如果您使用电池供电的ESP8266板制作了一个项目&#xff0c;或者只是将ESP8266 NodeMCU板连接到了移…