视频文件写入转换之图像处理-OpenCV应用学习笔记五

在《笔记二》中我们做了视频播放和控制的实现,仅仅算是完成了对视频文件的读取操作;今天我们来一起练习下对视频文件的写入操作:格式转换。
实现功能:
打开一个视频文件play.avi,读取文件内容,将每一帧图像转换为对数极坐标格式最后将转换后的图像序列写入新的视频文件play1.avi中。如下图对比效果:


函数精析:
CvVideoWriter* cvCreateVideoWriter(const char* filename, int fourcc, double fps, CvSize frameSize, int isColor=1 )
- 创建视频文件写入器
- filename:新建视频文件的名称,fourcc:视频压缩的编码格式,fps:视频播放帧率,size:帧尺寸
- isColor=0:希望得到灰度帧进行编码;!=0:希望得到彩色帧进行编码
- OpenCV用宏CV_FOURCC()来制定编码格式:CV_FOURCC('P','I','M,'1')—MPEG;CV_FOURCC('M','J','P','G')motion-jpeg
cvLogPolar(const CvArr* src, CvArr* dst, CvPoint2D32f center, double M, int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS )
- 将图像映射到极坐标;
- src:原图像,dst:输出图像,center:转换中心
- 函数模仿人眼中心凹注视,用在旋转不变的模板匹配和物体追踪上
cvWriteFrame(CvVideoWriter* writer, const IplImage* image)
- 将指定的图像写入到视频文件中,必须是在打开视频写入器之前已经定义的相同图像尺寸
- writer:视频写入器,image:写入的视频帧
附源代码:
#include "stdafx.h"
#include "cv.h"
#include "highgui.h" int main(int argc,char** argv)
{
if(argc == )
{ CvCapture* capture = ;
capture = cvCreateFileCapture(argv[]); //从指定文件获取视频流
if(!capture) return -;
IplImage *bgr_frame = cvQueryFrame(capture); //从读取的视频流capture中读取一帧
double fps = cvGetCaptureProperty(capture,CV_CAP_PROP_FPS);//获取视频帧率
CvSize size = cvSize((int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH),
(int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT));
//获取视频流中帧的尺寸 /*cvCreateVideoWriter(新建视频文件名,视频压缩编码格式,帧率,尺寸)*/
CvVideoWriter * writer = cvCreateVideoWriter(argv[],CV_FOURCC('M','J','P','G'),
fps,size); //创建视频文件写入器 IplImage* logpolar_frame = cvCreateImage(size,IPL_DEPTH_8U,);
while((bgr_frame = cvQueryFrame(capture)) != NULL)
{
/* 将图像映射到极坐标cvLogPolar(原图像,输出图像,转换中心,量级水平,标志位)*/
cvLogPolar(bgr_frame,logpolar_frame,cvPoint2D32f(bgr_frame->width/,
bgr_frame->height/),,CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS);
cvWriteFrame(writer,logpolar_frame);//(视频写入器,要吸入的帧)
}
cvReleaseVideoWriter(&writer);
cvReleaseImage(&logpolar_frame);
cvReleaseCapture(&capture);
}
return ;
}
视频文件写入转换之图像处理-OpenCV应用学习笔记五的更多相关文章
- OpenCV入门学习笔记
OpenCV入门学习笔记 参照OpenCV中文论坛相关文档(http://www.opencv.org.cn/) 一.简介 OpenCV(Open Source Computer Vision),开源 ...
- Android NDK开发及OpenCV初步学习笔记
https://www.jianshu.com/p/c29bb20908da Android NDK开发及OpenCV初步学习笔记 Super_圣代 关注 2017.08.19 00:55* 字数 6 ...
- 【opencv学习笔记五】一个简单程序:图像读取与显示
今天我们来学习一个最简单的程序,即从文件读取图像并且创建窗口显示该图像. 目录 [imread]图像读取 [namedWindow]创建window窗口 [imshow]图像显示 [imwrite]图 ...
- 播放一个视频并用滚动条控制进度-OpenCV应用学习笔记二
今天我们来做个有趣的程序实现:利用OpenCV读取本地文件夹的视频文件,并且在窗口中创建拖动控制条来显示并且控制视频文件的读取进度. 此程序调试花费了笔者近一天时间,其实大体程序都已经很快写出,结果执 ...
- Python学习笔记五(读取提取写入文件)
#Python打开读取一个文件内容,然后写入一个新的文件中,并对某些字段进行提取,写入新的字段的脚本,与大家共同学习. import os import re def get_filelist(dir ...
- opencv的学习笔记3
CMake是一个比make更高级的编译配置工具,它可以根据不同平台.不同的编译器,生成相应的Makefile或者vcproj项目.通过编写CMakeLists.txt,可以控制生成的Makefile, ...
- opencv的学习笔记2
继续昨晚的学习总结,昨晚看到轨迹条的创建就没有看下去了,今天继续: 1.轨迹条的创建: 轨迹条往往会和一个回调函数配合使用,当轨迹条发生改变,就调用这个轨迹条的回调函数 int createTrack ...
- Webpack4 学习笔记五 图片解析、输出的文件划分目录
前言 此内容是个人学习笔记,以便日后翻阅.非教程,如有错误还请指出 webpack打包图片和划分文件路径 使用图片的方式 通过 new Image() 在 css中设置 background-imag ...
- Canny边缘检测及图像缩放之图像处理算法-OpenCV应用学习笔记四
在边缘检测算法中Canny颇为经典,我们就来做一下测试,并且顺便实现图像的尺寸放缩. 实现功能: 直接执行程序得到结果如下:将载入图像显示在窗口in内,同时进行图像两次缩小一半操作将结果显示到i1,i ...
随机推荐
- SQL 查询性能优化----解决书签查找
先来看看什么是书签查找: 当优化器所选择的非聚簇索引只包含查询请求的一部分字段时,就需要一个查找(lookup)来检索其他字段来满足请求.对一个有聚簇索引的表来说是一个键查找(key lookup), ...
- 【译】RabbitMQ:远程过程调用(RPC)
在教程二中,我们学习了如何使用工作队列在多个工作线程中分发耗时的任务.但如果我们需要去执行远程机器上的方法并且等待结果会怎么样呢?那又是另外一回事了.这种模式通常被称为远程过程调用(RPC). 本教程 ...
- Convert.ToInt32,int.Parse,int.TryParse,(int)的区别
1 (int)变量名[强制类型转换] 该转换方式主要用于数字类型转换,从int类型到long,float,double,decimal类型,可以使用隐式转换,但是从long类型到int类型就需要使用显 ...
- SQL Server 数据库 'xxx' 正处于转换状态。请稍后再尝试该语句。
问题是这样的,最近因义务需要,公司更换了数据库服务器.数据库随之切换到新的服务器上. 服务器是 Windows Server 2012系统,数据库是SQL Server 2012 .上面有 多个数据库 ...
- My安卓知识3--多个activity之前共享数据的方法
在网上搜这个问题的时候看到了有一篇文章说有五种方法: 1.基于消息的通信机制 Intent ---boudle ,extra 数据类型有限,比如遇到不可序列化的数据Bitmap,InputStrea ...
- ceph实践: 搭建环境
作者:吴香伟 发表于 2014/09/26 版权声明:可以任意转载,转载时务必以超链接形式标明文章原始出处和作者信息以及版权声明 本节主要参考官网的ADDING/REMOVING OSDS章节. 同步 ...
- [python](爬虫)如何使用正确的姿势欣赏知乎的“长得好看是怎样一种体验呢?”问答中的相片
从在知乎关注了几个大神,我发现我知乎的主页画风突变.经常会出现 ***长得好看是怎样一种体验呢? 不用***,却长得好看是一种怎样的体验? 什么样***作为头像? ... 诸如此类的问答.点进去之后发 ...
- spring mvc 工作流程
Spring Web MVC 处理Http请求的大致过程:一旦Http请求到来,DispatcherSevlet将负责将请求分发.DispatcherServlet可以认为是Spring提供的前端控制 ...
- cxf+spring+数字签名开发webservice(一)
数字证书的准备 下面做的服务端和客户端证书在例子中无法加解密,不知道什么原因,我是使用正式环境中的客户端和服务端进行开发测试的,所以需要大家自己去准备证书,或者有人知道为什么jdk生成 ...
- getElementsByTagName获得的不是数组的问题!
getElementsByTag() returns a NodeList instead of an Array. You can convert a NodeList to an Array bu ...