一、视频的定义

视频(Video)泛指将一系列静态影像以电信号的方式加以捕捉、纪录、处理、储存、传送与重现的各种技术。连续的图像变化每秒超过24帧(frame)画面以上时,根据视觉暂留原理,人眼无法辨别单幅的静态画面;看上去是平滑连续的视觉效果,这样连续的画面叫做视频。视频技术最早是为了电视系统而发展,但现在已经发展为各种不同的格式以利消费者将视频记录下来。网络技术的发达也促使视频的纪录片段以串流媒体的形式存在于因特网之上并可被电脑接收与播放。视频与电影属于不同的技术,后者是利用照相术将动态的影像捕捉为一系列的静态照片。

二、OPEN CV视频处理流程

三、OPEN CV支持的s

1、非压缩格式的AVI文件(或是MPEG1格式的),这个不需要装任何插件就可以播放了。

2、DIVX格式的AVI,这也是MPEG4的一种,安装最新的DIVX 5.21(目前最新版),就可以播放了,不过缺点是在播放之初会有一个DIVX的标记显示几秒。

下载地址: http://gupin.fangdown.com/soft/138.htm

3、XVID格式的AVI,这也是MPEG4的一种,可以说是从DIVX变种而来的,据说是XVID原作者不满意DIVX商业化收费的行为,而开发的一个全Free的MPEG4编码核心,安装最新的XVID(1.02版)就可以播放。

下载地址: http://gupin.fangdown.com/soft/45.htm

4、ffdshow MPEG-4格式的AVI,现在越来越多的AVI都采用ffdshow MPEG-4来,集成了DIVX与XVID的一种东西(好象还支持WMV与AC3音频),因此如果你装了ffdshow MPEG-4,就可以不用装XVID与DIVX等编码核心了。另外ffdshow MPEG-4也提供丰富的滤镜功能比如增亮,增加锐度等,最新的ffdshow MPEG-4 Video Decoder 20041012。

下载地址:http://gupin.fangdown.com/soft/383.htm

5、WMV9格式的AVI,微软自己推出的MPEG4编码标准,使用Windows Media 9.0就可以播放,如果没有的话,也可以下载一个Windows Media Encoder 9.0,使你的系统支持WMV 9.0的格式。

下载地址:http://www.ogg.cn/Software/view-software-62.html

6、VP6格式的AVI,也是一种MPEG4的编码格式,On2 Technologies开发的编码器,VP6号称在同等码率下,视频质量超过了Windows Media 9、Real 9和H.264。VP6视频编码器目前被中国的EVD所采用。说真的,现在用这个不多。最新版本是VP6 vfw Codec 6.2.6.0。

四、OPEN CV处理

int main()
{
cout << "请输入您要运行的功能:" << endl;
cout << "1:批量读取目录下的图片并展示:" << endl;
cout << "2:将视频中的帧保存为图片" << endl;
cout << "3:将图片合成为视频" << endl;
cout << "请输入您的选择:" << endl;
int iopt;
cin >> iopt;
switch (iopt)
{
case ://批量读取文件目录图片并展示
{
char filename[] = { };
char winname[] = {"winimg"};
Mat winimg;
for (int i = ; i <= ; i++)
{
snprintf(filename, , "C:\\dev\\res\\IMG_%d.JPG", i);
//strcpy_s(winname, filename);
winimg=imread(filename);
if (winimg.empty()) break;
imshow(winname, winimg);
if (waitKey() >= ) break;
}
destroyAllWindows();
break;
}
case :
{
//将视频拆分成图片保存
char outfile[] = { };
VideoCapture cap;
cap.open("C:\\dev\\res\\test.mp4");
if (!cap.isOpened())
{
cout << "视频打开失败" << endl;
return -;
}
Mat frame;
int totalframe = cap.get(CV_CAP_PROP_FRAME_COUNT);
for(int i=;i<totalframe;i++)
{
cap >> frame;
if (frame.empty()) break;
snprintf(outfile, , "C:\\dev\\res\\IMG_%d.jpg", i);
imshow("img", frame);
imwrite(outfile, frame);
if (waitKey() >= ) break;
}
destroyAllWindows();
break;
}
case ://图像合成视频
{
char filename[] = { };
Size size0 = Size(, );
VideoWriter writer("c:\\dev\\res\\merge.avi",CV_FOURCC('X','V','I','D'),,size0,true);
Mat frame;
for (int i = ; i < ; i++)
{
snprintf(filename, , "C:\\dev\\res\\IMG_%d.jpg", i);
frame = imread(filename);
if (frame.empty()) break;
imshow("winname", frame);
writer << frame;
}
destroyAllWindows();
break;
}
}
return ;
}

[OPEN CV] 常用视频操作方法的更多相关文章

  1. JavaScript常用数组操作方法

    数组是用于储存多个相同类型数据的集合,平时在数据的处理中用到最多,JavaScript 中常用的操作方法 1.concat()concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,仅 ...

  2. Open CV 播放视频(2)

      演示:读取一个视频,然后播放,ESC退出.   #include "stdafx.h"   #include <opencv2/core/core.hpp>   # ...

  3. Emgu.CV 播放视频

    using Emgu.CV; using System; using System.Drawing; using System.Threading; using System.Windows.Form ...

  4. Emgu CV播放视频

    public partial class Form1 : Form {     Capture _capture;     public Form1()     {         Initializ ...

  5. Emgu.CV 播放视频-本地文件/RTSP流

    using Emgu.CV; using System; using System.Drawing; using System.Threading; using System.Windows.Form ...

  6. selenium - 常用浏览器操作方法

    常用浏览器操作 (1)初始化浏览器会话: from selenium import webdriver driver = webdriver.Chrome() (2)浏览器最大化操作: driver. ...

  7. JavaScript常用数组操作方法,包含ES6方法

    一.concat() concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,仅会返回被连接数组的一个副本. var arr1 = [1,2,3]; var arr2 = [4,5]; ...

  8. 技巧收藏|10个JavaScript常用数组操作方法

    摘要:这篇文章,向大家展示了在日常开发中,数组有哪些小技巧值得借鉴和学习. 在web前端开发第二阶段Javascript中,数组是一个重要且常见的知识点,我们经常将数据存储在数组中,遍历数组或替换数组 ...

  9. JavaScript常用字符串操作方法总结

    1.判断是否为字符串:typeof() var str = 'abcd'; typeof(str);   //string 2.获取字符串的长度:length var str = '123456789 ...

随机推荐

  1. 【Java编程】随机数的不重复选择

    随机数的不重复选择就是从n个数中随机选取m(m<n)个数.在本文中,我们用Java来实现.因此我们先介绍Java的相关知识. 在Java中,Java.util.Set接口和Java.util.L ...

  2. Sample Code for Qp_preq_pub.Price_request Api to Simulate an Ask for Promotion Modifier

    DECLARE p_line_tbl QP_PREQ_GRP.LINE_TBL_TYPE; p_qual_tbl QP_PREQ_GRP.QUAL_TBL_TYPE; p_line_attr_tbl ...

  3. LeetCode之“动态规划”:Dungeon Game

    题目链接 题目要求: The demons had captured the princess (P) and imprisoned her in the bottom-right corner of ...

  4. 收集一些dos网络配置命令,从新获取ip刷新dns

    今天台式机插着无线网卡连接学校无线网,结果就要登录了,完后ip地址固定半天,换了mac地址重新分配还是不能改,ping了主机也不通,我想可能是dns没有刷新.现在收集几个dos命令用来配置网络: 1. ...

  5. gtk+2.0中GtkObject结构中没有klass成员的解决办法

    gtk+2.0中一些较老的程序中会有如下的代码: #define EVENT_METHOD(obj, method) GTK_WIDGET_CLASS(GTK_OBJECT(obj)->klas ...

  6. Mac OS 的属性列表文件plist装换

    Mac OS系统自身包含有转换plist的工具:plutil.其中-p是以human可读方式显示plist文件,而convert就是转换参数,其中支持的格式有:xml,二进制和json.下面拿一个实际 ...

  7. M1卡区块控制位详解

    M1卡区块控制位详解 Mifare 1S50/Mifare 1S70 每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取 控制.存取控制为4个字节,共32位,扇区中的每个块(包括 ...

  8. Validate Binary Search Tree(一定掌握的方法)

    Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ...

  9. 新型USB病毒BadUSB 即使U盘被格式化也无法根除

    这种病毒并不存在于USB设备中的存储文件中,而是根植于USB设备的固件里.这意味着,即使用户对U盘进行全面的格式化清理,仍不能"杀死"它.

  10. 三大框架:Struts+Hibernate+Spring

    三大框架:Struts+Hibernate+Spring Java三大框架主要用来做WEN应用. Struts主要负责表示层的显示 Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作 ...