这次是变换视频内容并且写入新的文件。

代码如下:

note:因为代码比较少,前几篇博客的代码都是手打的,并且做了一些修改。

#include <cv.h>
#include <highgui.h> int main(int argc, char **argv)
{
assert(argc == 3);
CvCapture *org_capture = cvCreateFileCapture(argv[1]);
if(!org_capture)
return -1; /* get attribute of org frame */
double org_fps = cvGetCaptureProperty(org_capture, CV_CAP_PROP_FPS);
int org_width = cvGetCaptureProperty(org_capture, CV_CAP_PROP_FRAME_WIDTH);
int org_height = cvGetCaptureProperty(org_capture, CV_CAP_PROP_FRAME_HEIGHT);
CvSize org_size = cvSize(org_width, org_height);
CvPoint2D32f org_center = cvPoint2D32f(org_width/2 , org_height/2); /* create new file */
CvVideoWriter *dest_writer = cvCreateVideoWriter(argv[2],
CV_FOURCC('M', 'J', 'P', 'G'),
org_fps, org_size); /* transform every frame */
IplImage *dest_frame = cvCreateImage(org_size, IPL_DEPTH_8U, 3);
IplImage *org_frame = NULL;
while(NULL != (org_frame = cvQueryFrame(org_capture))) { //cvLogPolar(org_frame, dest_frame, org_center, 40,
// CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS);
//cvWriteFrame(dest_writer, dest_frame);
cvWriteFrame(dest_writer, org_frame); } /* release resource */
cvReleaseVideoWriter(&dest_writer);
cvReleaseImage(&dest_frame);
cvReleaseCapture(&org_capture);
return 0; }

//cvLogPolar(org_frame, dest_frame, org_center, 40,

        //    CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS);

        //cvWriteFrame(dest_writer, dest_frame);



这里注释掉的几行是实际的变换代码,由于变换出来的视频不好看,于是直接使用cvWriteFrame来展示效果。这种变换的应用可以有很多,比如视频的边缘检测,人脸识别等。这里的代码实际上做了一个转码,可以当做一个转码器。

本来想使用H.264的,可惜linux上面默认没有装,所以使用了MJPG的编码。

这个代码是指定编码器的,可以指定很多种,欲知详情,grep一下代码吧。

					CV_FOURCC('M', 'J', 'P', 'G'),

cvLogPolar是做一个坐标变换,出来的效果是比较扭曲的图像,看起来挺难看的,这里就不用了。

作为转码器,输入的AVI文件有44.4MB,输出的MJPG达到了149.8MB。但是输出之后linux就可以播放啦!

如图:

Opencv step by step - 视频变换的更多相关文章

  1. WPF Step By Step 系列 - 开篇 ·

    WPF Step By Step 系列 - 开篇 公司最近要去我去整理出一个完整的WPF培训的教程,我刚好将自己学习WPF的过程和经验总结整理成笔记的方式来讲述,这里就不按照书上面的东西来说了,书本上 ...

  2. 课程四(Convolutional Neural Networks),第一周(Foundations of Convolutional Neural Networks) —— 2.Programming assignments:Convolutional Model: step by step

    Convolutional Neural Networks: Step by Step Welcome to Course 4's first assignment! In this assignme ...

  3. Metrics.NET step by step使用Metrics监控应用程序的性能

    使用Metrics监控应用程序的性能 在编写应用程序的时候,通常会记录日志以便事后分析,在很多情况下是产生了问题之后,再去查看日志,是一种事后的静态分析.在很多时候,我们可能需要了解整个系统在当前,或 ...

  4. 稀疏表示step by step(转)

    原文地址:稀疏表示step by step(转)作者:野火春风 稀疏表示step by step(1)     声明:本人属于绝对的新手,刚刚接触“稀疏表示”这个领域.之所以写下以下的若干个连载,是鼓 ...

  5. Asp.Net Core 5 REST API - Step by Step

    翻译自 Mohamad Lawand 2021年1月19日的文章 <Asp.Net Core 5 Rest API Step by Step> [1] 在本文中,我们将创建一个简单的 As ...

  6. Asp.Net Core 5 REST API 使用 JWT 身份验证 - Step by Step

    翻译自 Mohamad Lawand 2021年1月22日的文章 <Asp Net Core 5 Rest API Authentication with JWT Step by Step> ...

  7. Asp Net Core 5 REST API 使用 RefreshToken 刷新 JWT - Step by Step

    翻译自 Mohamad Lawand 2021年1月25日的文章 <Refresh JWT with Refresh Tokens in Asp Net Core 5 Rest API Step ...

  8. Linkerd 2.10(Step by Step)—使用 Kustomize 自定义 Linkerd 的配置

    Linkerd 2.10 系列 快速上手 Linkerd v2 Service Mesh(服务网格) 腾讯云 K8S 集群实战 Service Mesh-Linkerd2 & Traefik2 ...

  9. Step by step Dynamics CRM 2011升级到Dynamics CRM 2013

    原创地址:http://www.cnblogs.com/jfzhu/p/4018153.html 转载请注明出处 (一)检查Customizations 从2011升级到2013有一些legacy f ...

  10. Step by Step 创建一个新的Dynamics CRM Organization

    原创地址:http://www.cnblogs.com/jfzhu/p/4012833.html 转载请注明出处 前面演示过如何安装Dynamics CRM 2013,参见<Step by st ...

随机推荐

  1. cocos2d-x之Action特效

    bool HelloWorld::init() { if ( !Layer::init() ) { return false; } Size visibleSize = Director::getIn ...

  2. 烂泥:NFS存储与VSphere配合使用

    本文首发于烂泥行天下. 公司服务器的虚拟化使用的是VM ESXi 5.0,为了更有效的利用服务器的硬盘空间.就把所有的镜像文件存放到另外一台linux服务器上,这样在使用vsphere安装虚拟机时可以 ...

  3. hdu 4607 Park Visit 求树的直径

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4607 题目大意:给你n个点,n-1条边,将图连成一棵生成树,问你从任意点为起点,走k(k<=n) ...

  4. Hadoop Yarn core concepts

    The fundamental idea of YARN is to split the two major responsibilities of the JobTracker—that is, r ...

  5. 探索 OpenStack 之(14):OpenStack 中 RabbitMQ 的使用

    本文是 OpenStack 中的 RabbitMQ 使用研究 两部分中的第一部分,将介绍 RabbitMQ 的基本概念,即 RabbitMQ 是什么.第二部分将介绍其在 OpenStack 中的使用. ...

  6. Ajax与用户交互的存储格式JSON

    数据存储是JavaScript的核心功能,这是一个在学习前期的一个容易让人迷惑的问题.它并不是那种像页面滑动.幻灯片展示.淡入淡出等吸引人眼球的特效.适当的存放好数据,就有利于我们组织起结构,又能使应 ...

  7. hdu-1789-Doing Homework again

    /* Doing Homework again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...

  8. 记忆化搜索 codevs 2241 排序二叉树

    codevs 2241 排序二叉树 ★   输入文件:bstree.in   输出文件:bstree.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 一个边长为n的正三 ...

  9. Hibernate入门注解笔记

    @Entity 代表实体 映射一张表 @Table 定义表的属性 @Embeddable 定义类级别可以被嵌入 @Id 指定主键 @GeneratedValue 指定主键生成策略 @Column指定列 ...

  10. UITableViewCell动态AutoLayout布局

    相关链接: 使用Autolayout实现UITableView的Cell动态布局和高度动态改变 IOS tableView cell动态高度 (autoLayout) AutoLayoutClub 使 ...