OpenCV 视频处理框架
OpenCV 本身集成了 FFmpeg,因此对于视频是有解码和编码功能的。尽管其效率在本人看来还不能跟未被封装的FFmpeg相提并论,然用其来对视频进行解码得到图像,然后对图像进行处理并将得到的图像又一次压缩成视频是很方便的,以下将介绍把视频解码成图像并进行帧差法等操作后往回压缩成视频的框架搭建。值得注意的是在OpenCV2.1版本号图像压缩成视频是有BUG的,不妨用新的版本号来进行学习。除此之外。要让opencv支持压缩,还须要装相相应的编码器。详情可见。
#include <opencv2/opencv.hpp>
#include "opencv2/highgui/highgui.hpp"
#include <opencv2/core/core.hpp>
using namespace cv; CvVideoWriter * pVW = NULL;//写回文件对象 void MotionDetect(IplImage *frame1, IplImage *frame2)//两帧图像处理函数
{
//在此增加图像处理代码
} void main()
{
IplImage *frame1 = NULL, *frame2 = NULL;//frame1为新的图像,frame2为frame1的前一张图像
CvCapture *capture = NULL;
capture = cvCaptureFromAVI("2.avi");//打开视频
frame1 = cvQueryFrame(capture);//从摄像头或者文件里抓取并返回一帧
frame2 = cvCreateImage(cvGetSize(frame1), 8, 3);
cvCopy(frame1, frame2);
frame1 = cvQueryFrame(capture);
pVW = cvCreateVideoWriter("output.avi", CV_FOURCC('D', 'I', 'V', 'X'), 30, cvSize(frame1->width, frame1->height), 1);//以mpeg4数据格式进行视频编码。帧率为30帧/s while (frame1)
{
MotionDetect(frame1, frame2);//移动侦測
cvCopy(frame1, frame2);
cvShowImage("", frame2);//显示处理完图像
cvWaitKey(5);
cvWriteFrame(pVW, frame2);//将处理完图像数据写入视频
frame1 = cvQueryFrame(capture);//接着从视频中拷入图像
}
cvReleaseImage(&frame2);
cvReleaseVideoWriter(&pVW);
}
由于这里调用到的解码器并不是OpenCV自带的,因此假设之前没安装对应的解码器,函数会一直返回空,这样的情况能够到这里下载对应的解码器来解决。
在OpenCV2.0接口中,实现代码例如以下:
#include <opencv2/opencv.hpp>
#include "opencv2/highgui/highgui.hpp"
#include <opencv2/core/core.hpp> using namespace cv; void main()
{
VideoCapture capture;
capture.open("30.avi");
if (!capture.isOpened())
{
printf("文件打开失败");
}
//获取整个帧数
long totalFrameNumber = capture.get(CV_CAP_PROP_FRAME_COUNT);
for (size_t i = 0; i < totalFrameNumber; i++)
{
Mat frame;
capture >> frame;
imshow("readvideo", frame);
waitKey(10);
}
}
OpenCV 视频处理框架的更多相关文章
- iOS集成ijkplayer视频直播框架,遇到的bug和坑...
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 32.0px "Helvetica Neue"; color: #555555 } p. ...
- 【转】OMCS网络语音视频聊天框架(跨平台)
原文地址:http://www.cnblogs.com/zhuweisky/archive/2012/08/02/2617877.html OMCS网络语音视频框架是集成了语音通话.视频通话.远程桌面 ...
- OpenCV视频读取播放,视频转换为图片
转载请注明出处!!! http://blog.csdn.net/zhonghuan1992 OpenCV视频读取播放,视频转换为图片 介绍几个有关视频读取的函数: VideoCapture::Vide ...
- 马蜂窝视频编辑框架设计及在 iOS 端的业务实践
(马蜂窝技术公众号原创内容,ID: mfwtech) 熟悉马蜂窝的朋友一定知道,点击马蜂窝 App 首页的发布按钮,会发现发布的内容已经被简化成「图文」或者「视频」. 长期以来,游记.问答.攻略等图文 ...
- iOS仿写有妖气漫画、视频捕获框架、启动页广告页demo、多种动画效果等源码
iOS精选源码 以tableview的section为整体添加阴影效果/ta'b'le'vi'e'w顶部悬浮.... 一个可以轻松应用自定义过滤器的视频捕获框架. 基于UITableView的组件,旨 ...
- opencv 视频处理相关
包含视频格式知识(编解码和封装格式):如何获取视频信息及视频编解码格式:opencv读取及保存视频,及opencv fourcc编码格式 一.基础知识 视频的编解码格式和封装格式 参考如山似水 视频编 ...
- (转)OpenCV 基本知识框架
以下是对<学习OpenCV>一书知识框架的简单梳理 转自:http://blog.chinaunix.net/uid-8402201-id-2899695.html 一.基础操作 ...
- 集成IJKplayer视频直播框架
ijkplayer 是一款做视频直播的框架, 基于ffmpeg, 支持 Android 和 iOS, 网上也有很多集成说明, 但是个人觉得还是不够详细, 在这里详细的讲一下在 iOS 中如何集成ijk ...
- iOS中集成ijkplayer视频直播框架
ijkplayer 是一款做视频直播的框架, 基于ffmpeg, 支持 Android 和 iOS, 网上也有很多集成说明, 但是个人觉得还是不够详细, 在这里详细的讲一下在 iOS 中如何集成ijk ...
随机推荐
- Ubntu 14.04 下 开源骨架跟踪-skeltrack
Skeltrack是个不错的开源骨架跟踪软件.跟踪起来还相对的稳定速度还不错.能满足基本的体感功能.下面来介绍下怎么安装. 1.运行环境配置 #need clutter 1.8 or greater ...
- C++反汇编-继承和多重继承
学无止尽,积土成山,积水成渊-<C++反汇编与逆向分析技术揭秘> 读书笔记 一.单类继承 在父类中声明为私有的成员,子类对象无法直接访问,但是在子类对象的内存结构中,父类私有的成员数据依然 ...
- TLC2262和TLC2264 轨对轨运算放大器
TLC2262和TLC2264分别是TI公司双路和四路运算放大器,两种器件可以在单电源或双电源条件下供电,从而增强了动态的范围,可以达到轨对轨输出的性能.TLC226X系列与TLC225X的微功耗和T ...
- hdu1015 Safecracker (暴力枚举)
http://acm.hdu.edu.cn/showproblem.php?pid=1015 Safecracker Time Limit: 2000/1000 MS (Java/Others) ...
- LINUX mysql 源码安装
一.下载编译安装 #cd /usr/local/src/ #wget http://mysql.byungsoo.net/Downloads/MySQL-5.1/mysql-5.1.38.tar.gz ...
- GlobalGetAtomName GlobalDeleteAtom 引用 WinAPI: AddAtom、DeleteAtom、FindAtom、GetAtomName、GlobalAddAtom、GlobalDeleteAtom、GlobalFindAtom、GlobalGetAtomName
http://www.cnblogs.com/del/archive/2008/02/28/1085124.html 这是储存字符串的一组 API.通过 AddAtom 储存一个字符串, 返回一个 I ...
- mybatis逆向工程--自动生成实体代码(mybatis-generator)
随便找个目录, 添加文件, 如图 主要是两个jar包, generator的下载路径: https://github.com/mybatis/generator/releases 驱动包随 ...
- restful api安全验证问题
没有绝对的安全,这个话题很深, 下文都是自己的一些理解,水平有限,如有勘误,希望大家予以指正. 由于 RESTful Api 是基于 Http 协议的 Api,是无状态传输,所以 只要和用户身份有关的 ...
- eclipse svn最新更新地址
http://subclipse.tigris.org/update_1.12.x http://subclipse.tigris.org/servlets/ProjectProcess?pageID ...
- 使用stream(流)实现多表数据传输
使用stream(流)实现多表数据传输 几乎所有的TCP和HTTP通信控件都支持stream(流)的传输. 使用stream(流)是可以实现多表数据传输的. 但这需要自定义协议了: 合并后的strea ...