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

代码如下:

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. Homebrew OS X 不可或缺的套件管理器

    Homebrew OS X 不可或缺的套件管理器,可以说Homebrew就是mac下的apt-get.yum. 1.安装homebrew brew的安装很简单,使用一条ruby命令即可,Mac系统上已 ...

  2. Effective Java 52 Refer to objects by their interfaces

    Principle If appropriate interface types exist, then parameters, return values, variables, and field ...

  3. 在Web api2 中传递复杂参数的一点心得

    这两天在做的一个项目基于webapi2,期间遇到了复杂参数传递的问题.其中刚好看到园友的这篇文章,但是我测试收结果是失败的,还不知道是什么原因.最终经过思考后,找到了一种方法,和大家分享下. 在前端我 ...

  4. cxf 消息寻址

    一.消息寻址 WS-Addressing是将消息路由数据包含在SOAP头中的一种标准方法.利用WS-Addressing的消息可以在标准化的SOAP头中包含自己的包含发送元数据,而不是依赖于网络层传输 ...

  5. centos7安装python-pip

    在使用centos7的软件包管理程序yum安装python-pip的时候会报一下错误: No package python-pip available. Error: Nothing to do 说没 ...

  6. 常用awk命令(转)

    awk 用法:awk ' pattern {action} ' 变量名 含义 ARGC 命令行变元个数 ARGV 命令行变元数组 FILENAME 当前输入文件名 FNR 当前文件中的记录号 FS 输 ...

  7. Linux下Mysql安装

    1.下载安装包 首先查看Linux版本: [root@localhost ~]# lsb_release -a LSB Version: :core-4.0-amd64:core-4.0-noarch ...

  8. 20150912华为机考2之"输入一段字符串(英文),将每个单词首字母大写后输出"

    还有其他一些(隐性)要求(要不然无法通过测试): .如果首字母已经大写,则不用变 .不是英文字母的不变 e.g. Input: hello world! this is _Ljj speaking! ...

  9. 单调队列应用--BZOJ 3831 Little Bird

    3831: [Poi2014]Little Bird Time Limit: 20 Sec  Memory Limit: 128 MB Description In the Byteotian Lin ...

  10. C++ macro(宏)使用小结

    谈起C++中的宏,我们第一个想到的应该就是“#define”,它的基本语法长得像这样: #define macroname(para1, para2, para3, ... ,paran) macro ...