OpenCV代码提取:Windows上通过DShow获取Camera视频

2023-11-12

在OpenCV 3.1中获取视频的模块在videoio(video input and output module)中,调用VideoCapture类接口,除了videoio模块外还依赖core、highgui、imgproc、imgcodecs四个模块,而OpenCV 2.4.13.6仅需要core、highgui、imgproc三个模块。3.1中的videoio模块其实是将2.4.13.6 highgui模块中与视频相关的code挪到了videoio中。

3.1中默认走的是IVideoCapture类流程,如果IVideoCapture创建失败再试着走CvCapture类流程,而在2.4.13.6中就只能走CvCapture类流程。对外接口类VideoCapture的实现都在cap.cpp文件中。IVideoCapture的实现比CvCapture实现要复杂的多,因此这里以2.4.13.6中的code为参考进行code提取。

无论是3.1还是2.4.13.6,无论是IVideoCapture还是CvCapture,在Windows下它们默认的首选都是DShow即DirectShow,微软提供的一套在Windows平台上进行流媒体处理的开发包。除了DShow外,在Windows上还可以选择VFW即Video for Windows,由微软开发的使Windows能编解码数字视频的多媒体框架;也可以选择MSMF即Microsoft Media Foundation,是微软在Windows上推出的下一代多媒体开发库。这里提取DShow code。

主要涉及到的opencv cpp文件包括:

(1). highgui/src/cap.cpp:此文件是对外接口类VideoCapture的实现。

(2). highgui/src/cap_dshow.cpp:此文件是DShow相关的代码,主要包含三个类videoDevice、videoInput、CvCaptureCAM_DShow。CvCaptureCAM_DShow继承自CvCapture类。

(3). core/src/array.cpp:仅需要此文件中的很少一部分,主要涉及IplImage的创建和释放。

提取的所有相关code可在https://github.com/fengbingchun/OpenCV_Test/tree/master/src/fbc_cv 获取到。

测试代码如下:注:OpenCV原始代码中并不支持输入设备名获取视频,只能输入索引值,这里也先仅支持索引值的方式

#include "fbc_cv_funset.hpp"
#include <videocapture.hpp>
#include <opencv2/opencv.hpp>

int test_dshow()
{
#ifdef _MSC_VER
	int width = 640;
	int height = 480;
	int length = width * height * 3;

	fbc::VideoCapture capture(0);
	if (!capture.isOpened()) {
		fprintf(stderr, "fail to open capture\n");
		return -1;
	}

	capture.set(fbc::CV_CAP_PROP_FOURCC, fbc::CV_FOURCC('M', 'J', 'P', 'G'));
	capture.set(fbc::CV_CAP_PROP_FRAME_WIDTH, width);
	capture.set(fbc::CV_CAP_PROP_FRAME_HEIGHT, height);

	fbc::Mat_<unsigned char, 3> image(height, width);
	cv::Mat mat(height, width, CV_8UC3);
	const char* winname = "dshow video";
	cv::namedWindow(winname, 1);

	while (1) {
		capture >> image;
		mat.data = image.data;

		cv::imshow(winname, mat);
		if (cv::waitKey(30) >= 0)
			break;
	}

	return 0;
#else
	fprintf(stderr, "Error: only support windows platform\n");
	return -1;
#endif
}

GitHubhttps://github.com/fengbingchun/OpenCV_Test

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV代码提取:Windows上通过DShow获取Camera视频 的相关文章

随机推荐

  • 最全DOS的CMD命令,程序员必会

    转载 列宁的著作2021 09 05 10 54 16 文章标签DOSCMD命令行文件名实用程序文章分类代码人生阅读数207 CMD命令 开始 gt 运行 gt 键入cmd或command 在命令行里可以看到系统版本 文件系统版本 1 ap
  • Wget用法、参数解释的比较好的一个文章

    wget是一个从网络上自动下载文件的自由工具 它支持HTTP HTTPS和FTP协议 可以使用HTTP代理 所谓的自动下载是指 wget可以在用户退出系统的之后在后台执行 这意味这你可以登录系统 启动一个wget下载任务 然后退出系统 wg
  • FI(财务会计)模块简介

    一 财务会计系统主要特征及模型 一个有效的 现代的财务会计系统必须满足内部的和法定的会计面的要求 法定会计必须能够按有关规定向股东 债权人 劳工组织以及社会公众披露并提供所需的信息 而有效的公司管理会计必须包括控制和转移的功能 1 系统主要
  • 正确认识及掌握时间的用法

    前言 时间是一个相对地区而言的概念 因此有一个基准地区 就是本初子午线穿过的地区 了解世界时间相关的概念可以更好地协调全球人们的活动 便于跨越不同地区的时差 本初子午线 本初子午线指的是经过地球上经度为0度的那条线 也是国际日期变更线的起点
  • 亲密关系沟通-【情感勒索】建立良性沟通

    尊重对方的情绪 也应该判断对方的情绪是否合理 生活中情感勒索是很常见的 想要控制对方 我们可能都有做过这些行为 case 父母催婚 说女儿不孝顺 拒绝吃饭 情感勒索 case 男朋友不允许自己参加社团活动 不允许和其他男生接触 否则有自残行
  • G1垃圾收集器jvm参数设置

    堆内存最大最小值为4g 新生代内存2g Xms4g Xmx4g Xmn2g 元空间128m 最大320m XX MetaspaceSize 128m XX MaxMetaspaceSize 320m 开启远程debug Xdebug Xru
  • Java NIO(非阻塞IO) API介绍 .

    转载自 http blog csdn net daijialin article details 231384 在JDK 1 4以前 Java的IO操作集中在java io这个包中 是基于流的阻塞 blocking API 对于大多数应用来
  • 杭电OJ_(2043)密码

    Problem Description 网上流传一句话 常在网上飘啊 哪能不挨刀啊 其实要想能安安心心地上网其实也不难 学点安全知识就可以 首先 我们就要设置一个安全的密码 那什么样的密码才叫安全的呢 一般来说一个比较安全的密码至少应该满足
  • STL之vector的使用一(初始化vector)

    简介 vector可用于代替C中的数组 或者MFC中的CArray 从许多说明文档或者网上评论 一般一致认为应该多用vector 因为它的效率更高 而且具备很好的异常安全性 而且vector是STL推荐使用的默认容器 除非你知道你有特殊需要
  • 玩转ChatGPT:基于Mucloud建立本地知识库

    一 写在前面 人们普遍认为GPT有潜力颠覆教育行业 然而这种颠覆会以何种方式呈现呢 在刘慈欣的科幻世界中 三体人拥有知识遗传的能力 这使得他们的技术迭代成本降至最低 然而 我们人类并未具备这样的特性 每个新生命从出生之初就需要接受全新的教育
  • MarkDown中写UML图的方法

    目录 序 UML图之顺序图 顺序图的四个要素 关于消息箭头的语法 Mermaid中顺序图的简单例子 样例 用小人表示对象 为对象设置别名 激活对象 UML图之类图 类图中常见的关系 关于不同类型关系的语法 Mermaid中类图的简单例子 样
  • Python从菜鸟到高手(1):初识Python

    1 Python简介 1 1 什么是Python Python是一种面向对象的解释型计算机程序设计语言 由荷兰人吉多 范罗苏姆 Guido van Rossum 于1989年发明 第一个公开发行版发行于1991年 目前Python的最新发行
  • Verilog学习(2)运算符,赋值语句,块语句,条件语句,循环语句,生成块

    运算符 逻辑运算符 与 或 非 优先级高于 高于算术运算符 a gt b x gt y 可以写成 a gt b x gt y 一般还是加上括号 关系运算符 a b b 声明的关系是假的 返回0 优先级低于算术运算符 a b
  • mybatis 插入日期类型精确到秒的问题

    Mybatis 插入 数据库是为了防止插入空时报错 Mybatis 提供了一套机制 只要给定插入的字段的类型 如果为空 则它会自动处理为相应类型的默认值 ordercd jdbcType VARCHAR 我们都知道 Date类型是精确到时分
  • 【解决】NS3安装仿真可视化工具PyViz

    NS3安装仿真可视化工具PyViz 使用ns3软件版本是ns3 26 虚拟机系统Ubuntu16 04 问题 已经编译安装好ns3 并且也通过了测试 first second 等文件也可以正常编译 但是想用Pyviz看看图 运行命令sudo
  • 关于nginx proxy_pass指令’/’使用注意事项

    本文主要介绍了nginx代理配置完之后 nginx配置proxy pass 需要注意转发的路径配置 需要的朋友可以参考下 1 proxy pass配置说明 不带 代码如下 location test proxy pass http t6 8
  • Springboot中集成Prometheus

    目录 1 Prometheus基本原理和使用 2 Springboot中集成Prometheus 上文介绍了prometheus的基本原理和使用 本文将继续介绍如何在springboot中集成prometheus 基本配置 首先需要在spr
  • 提交微信小程序代码到微信代码管理git上

    背景 其实提交到github 码云 或者是 微信的git本质上没区别 这里只是想把微信的代码统一管理 所以决定放到微信的git上 创建远程项目 在微信开发管理工具上点击代码管理 完成用户名密码设定后 点击创建项目 纯英文路径 点击记入项目后
  • win10安装cuda10.2和对应的cudnn版本

    win10安装cuda10 2和对应的cudnn版本 查看自己电脑的显卡版本 1 点击 开始 键 打开NVIDIA控制面板 查看自己电脑的显卡版本 打开后点击 帮助 系统信息 组件 cuda安装 进入cuda官网 下载安装包 cuda官网
  • OpenCV代码提取:Windows上通过DShow获取Camera视频

    在OpenCV 3 1中获取视频的模块在videoio video input and output module 中 调用VideoCapture类接口 除了videoio模块外还依赖core highgui imgproc imgcod