Opencv step by step - 视频变换
这次是变换视频内容并且写入新的文件。
代码如下:
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 - 视频变换的更多相关文章
- WPF Step By Step 系列 - 开篇 ·
WPF Step By Step 系列 - 开篇 公司最近要去我去整理出一个完整的WPF培训的教程,我刚好将自己学习WPF的过程和经验总结整理成笔记的方式来讲述,这里就不按照书上面的东西来说了,书本上 ...
- 课程四(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 ...
- Metrics.NET step by step使用Metrics监控应用程序的性能
使用Metrics监控应用程序的性能 在编写应用程序的时候,通常会记录日志以便事后分析,在很多情况下是产生了问题之后,再去查看日志,是一种事后的静态分析.在很多时候,我们可能需要了解整个系统在当前,或 ...
- 稀疏表示step by step(转)
原文地址:稀疏表示step by step(转)作者:野火春风 稀疏表示step by step(1) 声明:本人属于绝对的新手,刚刚接触“稀疏表示”这个领域.之所以写下以下的若干个连载,是鼓 ...
- 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 ...
- 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> ...
- 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 ...
- Linkerd 2.10(Step by Step)—使用 Kustomize 自定义 Linkerd 的配置
Linkerd 2.10 系列 快速上手 Linkerd v2 Service Mesh(服务网格) 腾讯云 K8S 集群实战 Service Mesh-Linkerd2 & Traefik2 ...
- Step by step Dynamics CRM 2011升级到Dynamics CRM 2013
原创地址:http://www.cnblogs.com/jfzhu/p/4018153.html 转载请注明出处 (一)检查Customizations 从2011升级到2013有一些legacy f ...
- Step by Step 创建一个新的Dynamics CRM Organization
原创地址:http://www.cnblogs.com/jfzhu/p/4012833.html 转载请注明出处 前面演示过如何安装Dynamics CRM 2013,参见<Step by st ...
随机推荐
- Homebrew OS X 不可或缺的套件管理器
Homebrew OS X 不可或缺的套件管理器,可以说Homebrew就是mac下的apt-get.yum. 1.安装homebrew brew的安装很简单,使用一条ruby命令即可,Mac系统上已 ...
- Effective Java 52 Refer to objects by their interfaces
Principle If appropriate interface types exist, then parameters, return values, variables, and field ...
- 在Web api2 中传递复杂参数的一点心得
这两天在做的一个项目基于webapi2,期间遇到了复杂参数传递的问题.其中刚好看到园友的这篇文章,但是我测试收结果是失败的,还不知道是什么原因.最终经过思考后,找到了一种方法,和大家分享下. 在前端我 ...
- cxf 消息寻址
一.消息寻址 WS-Addressing是将消息路由数据包含在SOAP头中的一种标准方法.利用WS-Addressing的消息可以在标准化的SOAP头中包含自己的包含发送元数据,而不是依赖于网络层传输 ...
- centos7安装python-pip
在使用centos7的软件包管理程序yum安装python-pip的时候会报一下错误: No package python-pip available. Error: Nothing to do 说没 ...
- 常用awk命令(转)
awk 用法:awk ' pattern {action} ' 变量名 含义 ARGC 命令行变元个数 ARGV 命令行变元数组 FILENAME 当前输入文件名 FNR 当前文件中的记录号 FS 输 ...
- Linux下Mysql安装
1.下载安装包 首先查看Linux版本: [root@localhost ~]# lsb_release -a LSB Version: :core-4.0-amd64:core-4.0-noarch ...
- 20150912华为机考2之"输入一段字符串(英文),将每个单词首字母大写后输出"
还有其他一些(隐性)要求(要不然无法通过测试): .如果首字母已经大写,则不用变 .不是英文字母的不变 e.g. Input: hello world! this is _Ljj speaking! ...
- 单调队列应用--BZOJ 3831 Little Bird
3831: [Poi2014]Little Bird Time Limit: 20 Sec Memory Limit: 128 MB Description In the Byteotian Lin ...
- C++ macro(宏)使用小结
谈起C++中的宏,我们第一个想到的应该就是“#define”,它的基本语法长得像这样: #define macroname(para1, para2, para3, ... ,paran) macro ...