opencv实现读取视频保存视频
作者:qingtianweichong 发布时间:2021-08-16 15:57:50
标签:opencv,读取视频,保存视频
不得不说opencv是个强大的东东,以前做一个项目的一个模块时使用到进行图形处理,这次是想将一个视频的播放放慢,以前在网上看到opencv有这个功能,今天就不小心尝试了下,东西不多,主要是做个小记录还有一点要注意的小问题说一下,代码不多,基本上也都是copy的网上的
#include <iostream>
#include <assert.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <math.h>
using namespace std;
#ifdef NDEBUG
#pragma comment(lib, "highgui210.lib")
#pragma comment(lib, "cxcore210.lib")
#pragma comment(lib, "ml210.lib")
#pragma comment(lib, "cv210.lib")
#else
#pragma comment(lib, "highgui210d.lib")
#pragma comment(lib, "cxcore210d.lib")
#pragma comment(lib, "ml210d.lib")
#pragma comment(lib, "cv210d.lib")
#endif
char g_fileName[] = "C:\\Users\\Desktop\\test.avi";
char g_winodwName[] = "Cv Test";
int main()
{
::cvNamedWindow("g_winodwName", CV_WINDOW_AUTOSIZE);
CvCapture *pCvCapture = NULL;
pCvCapture = cvCreateFileCapture(g_fileName);
assert(NULL != pCvCapture);
IplImage *pIplFrame = NULL;
char out1[] = "C:\\Users\\Desktop\\out1.avi";
double fps1 = cvGetCaptureProperty(pCvCapture,
CV_CAP_PROP_FPS);
CvSize size1 = cvSize((int)cvGetCaptureProperty(pCvCapture,
CV_CAP_PROP_FRAME_WIDTH),
(int)cvGetCaptureProperty(pCvCapture,
CV_CAP_PROP_FRAME_HEIGHT));
CvVideoWriter *wrVideo1 = cvCreateVideoWriter(out1,
CV_FOURCC('X','V','I','D'),
10,
size1);
IplImage *gray1 = cvCreateImage(size1,8,1);
while (true)
{
pIplFrame = cvQueryFrame(pCvCapture);
if (NULL == pIplFrame)
{
break;
}
else
{
::cvShowImage(g_winodwName, pIplFrame);
//保存视频文件
cvCvtColor(pIplFrame,gray1,CV_RGB2GRAY);
cvWriteFrame(wrVideo1,gray1);
if (27 == ::cvWaitKey(120))
{
break;
}
}
}
::cvReleaseImage(&pIplFrame);
::cvDestroyWindow(g_winodwName);
::cvReleaseImage(&gray1);
::cvReleaseVideoWriter(&wrVideo1);
return cin.get();
}
有几个小地方需要注意下,第一个就是cvCreateFileCapture()这个函数如果路径正确还是返回NULL,则一般是因为没有安装解码器,一般有两个解码器k_lite和xvid,具体哪一个能行我不肯定,因为我试的时候两个都装了然后就正确运行了,还有一个就是cvCreateVideoWriter() 这个函数里面的参数,第三个参数是设置视频播放帧,数字越小,播放的速度越慢,应该每秒的帧数,保存视频的原理也是将图像帧保存到视频文件中。也就是说视频的播放是一个个图片帧的快闪。
来源:http://blog.csdn.net/qingtianweichong/article/details/11294699
0
投稿
猜你喜欢
- 资源下载:点此下载一、语言和环境1.实现语言: JAVA语言。2.环境要求: MyEclipse/Eclipse + Tomcat + My
- HTML是WEB的核心,互联网中你看到的所有页面都是HTML,不管它们是由JavaScript,JSP,PHP,ASP或者是别的什么WEB技
- 前两天朋友问我,有没有使用过StackExchange.Redis,问我要个封装类,由于之前都是使用ServiceStack.Redis,由
- 前言Mybatis真正强大的地方在于SQL映射语句,这也是它的魅力所在。相对于它强大的功能,SQL映射文件的配置却非常简单,我上篇文章语句讲
- 本文实例讲述了java实现变更文件查询的方法。分享给大家供大家参考。具体如下:自己经常发布包时需要查找那些文件时上次发包后更新的数据文件,所
- Java栈之链式栈存储结构实现一、链栈采用单链表来保存栈中所有元素,这种链式结构的栈称为链栈。二、栈的链式存储结构实现package com
- 在正常开发中,我们客户端需要用webView加载网页,再遇到网络慢或者访问的服务器响应时,页面是空白的,所以为了用户更好的体验,我们可以提供
- 基于比较的排序算法基本原理及Java实现1. 七大基于比较的排序-总览1.1常见基于比较的排序分类1.2时间复杂度,空间复杂度以及稳定性。稳
- 目录1. 简单认识BeanProcessorBeanProcessor的理解一个BeanProcessor的使用实例2. BeanProce
- java异常分为两大类,Checked异常和Runtime异常,Checked异常都是在编译阶段可以被处理的异常。Checked异常和Run
- 简介本文用示例介绍SpringMVC如何通过JSON格式传递入参。JSON格式使用post方式来请求,即:对应的注解为:@PostMappi
- 通过子类调用父类的变量,有两种方法:1、把父类的变量设置成public:package triangle.opengl.wlz.stu.ch
- 这篇文章主要介绍了java 读取系统Properties代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 本文实例讲述了C#基于OLEDB获取Excel文件表结构信息的方法。分享给大家供大家参考,具体如下:这个问题来自论坛提问,同理可以获得acc
- 前言多线程是我们开发过程中经常遇到的,也是必不可少需要掌握的。当我们知道需要进行多线程开发时首先需要知道的自然是如何实现多线程,也就是我们应
- 在本文中,我们将看到几个关于如何在Java 8中对List进行排序的示例。1.按字母顺序排序字符串列表List<String>
- Spring Cloud feign GET请求无法用实体传参代码如下:@FeignClient(name = "eureka-c
- Java读取txt文件内容。可以作如下理解:首先获得一个文件句柄。File file = new File(); file即为文件句柄。两人
- 一、问题分析入门案例的内容已经做完了,在入门案例中我们创建过一个SpringMvcConfig的配置类,再回想前面咱们学习Spring的时候
- 如下所示:import java.util.*;public class Main{public static void main(Stri