OpenCV的HighGUI提供了视频和摄像头的直接打开。那么它是如何实现的了?这里进行初步分析。
/**
 * Videoreader dispatching method: it tries to find the first
 * API that can access a given filename.
 */
CV_IMPL CvCapture * cvCreateFileCaptureWithPreference (const char * filename, int apiPreference)
{
    CvCapture * result = 0;
    switch(apiPreference) {
    default:
        // user specified an API we do not know
        // bail out to let the user know that it is not available
        if (apiPreference) break;
#ifdef HAVE_FFMPEG
    case CV_CAP_FFMPEG:
        TRY_OPEN(result, cvCreateFileCapture_FFMPEG_proxy (filename))
        if (apiPreference) break;
#endif
    case CV_CAP_VFW:
#ifdef HAVE_VFW
        TRY_OPEN(result, cvCreateFileCapture_VFW (filename))
#endif
#if defined HAVE_LIBV4L || defined HAVE_CAMV4L || defined HAVE_CAMV4L2 || defined HAVE_VIDEOIO
        TRY_OPEN(result, cvCreateCameraCapture_V4L(filename))
#endif
        if (apiPreference) break;
    case CV_CAP_MSMF:
#ifdef HAVE_MSMF
        TRY_OPEN(result, cvCreateFileCapture_MSMF (filename))
#endif
#ifdef HAVE_XINE
        TRY_OPEN(result, cvCreateFileCapture_XINE (filename))
#endif
        if (apiPreference) break;
#ifdef HAVE_GSTREAMER
    case CV_CAP_GSTREAMER:
        TRY_OPEN(result, cvCreateCapture_GStreamer (CV_CAP_GSTREAMER_FILE, filename))
        if (apiPreference) break;
#endif
#if defined(HAVE_QUICKTIME) || defined(HAVE_QTKIT)
    case CV_CAP_QT:
        TRY_OPEN(result, cvCreateFileCapture_QT (filename))
        if (apiPreference) break;
#endif
#ifdef HAVE_AVFOUNDATION
    case CV_CAP_AVFOUNDATION:
        TRY_OPEN(result, cvCreateFileCapture_AVFoundation (filename))
        if (apiPreference) break;
#endif
#ifdef HAVE_OPENNI
    case CV_CAP_OPENNI:
        TRY_OPEN(result, cvCreateFileCapture_OpenNI (filename))
        if (apiPreference) break;
#endif
#ifdef HAVE_OPENNI2
    case CV_CAP_OPENNI2:
        TRY_OPEN(result, cvCreateFileCapture_OpenNI2 (filename))
        if (apiPreference) break;
#endif
    case CV_CAP_IMAGES:
        TRY_OPEN(result, cvCreateFileCapture_Images (filename))
    }
    return result;
}
具体跟入源代码中的cvCreateFileCaptureWithPreference 函数。可以看到,它提供了这些选项(qt那个除外)
HAVE_FFMPEG
CV_CAP_VFW
HAVE_MSMF
HAVE_XINE
HAVE_GSTREAMER
HAVE_AVFOUNDATION
HAVE_OPENNI
CV_CAP_IMAGES

那么他们分别都是些什么东西了?
 
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。
VFW(Video for Windows)是Microsoft推出的关于数字视频的一个软件开发包,VFW的核心是AVI文件标准。AVI(Audio Video Interleave)文件中的音、视频数据帧交错存放。

It also decodes multimedia files like AVI, MOV, WMV, and MP3 from local disk
drives, and displays multimedia streamed over the Internet.
It interprets many of the most common multimedia formats available – and some
of the most uncommon formats, too.

GStreamer 是用来构建流媒体应用的开源多媒体框架(framework),其目标是要简化音/视频应用程序的开发,目前已经能够被用来处理像 MP3、Ogg、MPEG1、MPEG2、AVI、Quicktime 等多种格式的多媒体数据。

AVFoundation是一个OC媒体数据的高级框架。AVFoundation的构建考虑到了目前的硬件环境和应用程序,其设计过程高度依赖多线程机制。充分利用了多核硬件的优势并大量使用block和GCD机制,将复杂的计算机进程放到了后台线程运行。会自动提供硬件加速操作,确保在大部分设备上应用程序能以最佳性能运行。该框架就是针对64位处理器设计的,可以发挥64位处理器的所有优势。
 
 

OpenNI(开放自然交互)是一个多语言,跨平台的框架,它定义了编写应用程序,并利用其自然交互的API。OpenNI API由一组可用来编写通用自然交互应用的接口组成。OpenNI的主要目的是要形成一个标准的API,来搭建视觉和音频传感器与视觉和音频感知中间件通信的桥梁。

 
可以看到,OpenCV对于多平台支持,提供了不同的基础库。我认为,在windows下,应该选择的就是
 
VFW了。那么一般意义上认为VFW是比较老旧的技术了,在实际开发的时候,能感到一些性能的不足。
 
感谢阅读至此,希望有所收获。
 

转载于:https://www.cnblogs.com/jsxyhelu/p/6655078.html

从HighGUI的一段代码中看OpenCV打开视频的方式相关推荐

  1. Qt+OpenCV打开视频文件并在窗口界面上显示

    Qt+OpenCV打开视频文件并在窗口界面上显示 1.新建一个Qt Widgets Application,工程配置文件(.pro文件)内容如下: #------------------------- ...

  2. 14.【opencv打开视频以及摄像头】

    opencv调用影视设备 (一).三个APL: 1.认识三个apl 1.1VideoCaptrue类(获取视频设备) 1.2 read 读取视频帧 1.3 release 释放视频 (二).waitK ...

  3. QQ防红跳转PHP代码,最新版防红代码!完虐市场上所有防红!!仅需一段代码在QQ打开任意网址即可跳转...

    以下代码添加到根目录文件:index.php $conf['qqjump']=1; if(strpos($_SERVER['HTTP_USER_AGENT'], 'QQ/')||strpos($_SE ...

  4. opencv保存视频编码方式

    opencv常见保存视频的编码方式为MPV4,但是HTML5无法显示mpv4编码的视频,我们需要选择合适的编码来兼容. windows下使用avc1可以实现编码,选择H264编码报错可以尝试直接将fo ...

  5. opencv打开摄像头采集和保存

    纯粹是自娱自乐,并没有对opencv的使用进行深入的学习,用opencv打开视频文件或者打开摄像头采集,然后保存,这也是最基础的东西. 一.安装配置环境 VS2008下安装配置opencv,2005. ...

  6. Ubuntu下使用opencv打开图片视频

    Ubuntu下使用opencv打开图片视频 一.安装opencv 二.配置环境 1.安装完成后,开始配置环境 2.更新系统共享链接库 3.修改bash.bashrc 文件 4.完成后执行命令 三.打开 ...

  7. 通过OpenCV对视频进行绿幕抠图

    通过OpenCV对视频进行绿幕抠图 效果 代码 1.打开视频素材 2.保存视频路径及格式设置 3.读取一帧视频 4.寻找绿幕背景 5.融合 6.代码执行效果 效果 今天跟大家分享的是最近比较受大家喜欢 ...

  8. python opencv读取视频没声音_python + opencv: 解决不能读取视频的问题

    博主一开始使用python2.7和Opencv2.4.10来获取摄像头图像,程序如下: cap = cv2.VideoCapture(0) ret, frame = cap.read() 使用这个程序 ...

  9. 干货 | OpenCV看这篇就够了,9段代码详解图像变换基本操作

    作者 | 王天庆,长期从事分布式系统.数据科学与工程.人工智能等方面的研究与开发,在人脸识别方面有丰富的实践经验.现就职某世界100强企业的数据实验室,从事数据科学相关技术领域的预研工作. 来源 |  ...

  10. OpenCV之highgui 模块. 高层GUI和媒体I/O: 为程序界面添加滑动条 OpenCV的视频输入和相似度测量 用OpenCV创建视频

    为程序界面添加滑动条 在以前的教程中 (例如 linear blending 和 brightness and contrast adjustments)你有可能注意到需要 input 一些数值到我们 ...

最新文章

  1. 素数c语言k1k2,1.编写一程序,输入两个整数k1,k2,(k1k2)。求出k1,k2间的素数...
  2. CSS3 skew倾斜、rotate旋转动画
  3. 剑道训练很有趣的一种手段
  4. HDU - 5451 Best Solver(循环群+矩阵快速幂)
  5. linux mint 安装php,使用apt-get方式为Linux Mint 13安装PHP+MYSQL+Apache
  6. linux编译测试代码,rtc在linux上的测试代码
  7. 【JS第1期】深拷贝实现原理
  8. Windows Server 2003 SP2中文版开放下载
  9. html毕业设计任务要求,毕业设计任务书(学生填写).doc
  10. 分页插件Kaminari
  11. python 源代码 macd双底 高 低_MACD双底,三底背离公式指标
  12. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-TwinCAT自带的找原点功能块MC_Home怎么用
  13. 周鸿祎的“花房上市”执念
  14. iOS中录屏库ReplayKit的详尽使用总结
  15. 计算机开机慢怎么办,笔记本电脑开机很慢怎么办?五个小妙招来帮忙!
  16. 关于时区、时间、时刻
  17. 庄子:当你一事无成,感到茫然无助时,读懂这几句话,会让你重新看待人生
  18. 蜂鸟E200模块分析——IFU:Simple-BPU
  19. 价值180的仿3641美nv图库帝国CMS内核整站源码
  20. 小米刷 android o,一代神机!五年前的小米2刷入Android 8.0原生系统

热门文章

  1. python连接服务器informix_Python 用odbc连接Informix数据库 64位
  2. SQL Server 2014各版本区别
  3. 2022年电工杯B题应急物资配送问题浅析
  4. PDF在线阅读开发经验(FlexPaper+SWFTools+SaveAsPDFandXPS)
  5. 深入理解操作系统原理之Windows进程管理
  6. rs232 linux驱动程序,rs232驱动,USB-RS232驱动程序安装说明
  7. c语言程序设计运动的小球,课程设计--运动的小球(15页)-原创力文档
  8. 设计模式系列2-设计模式分类及23种设计模式中英文名称对照
  9. SQL Server 2012下载及安装教程
  10. H5图像遮罩-遁地龙卷风