使用 Python 和 DirectShow 从相机捕获图像

news/2024/9/24 7:18:40/

在 Python 中使用 OpenCV 是视觉应用程序原型的一个非常好的解决方案,它允许您快速起草和测试算法。处理从文件中读取的图像非常容易,如果要处理从相机捕获的图像,则不那么容易。OpenCV 提供了一些基本方法来访问链接到 PC 的相机(通过对象),但大多数时候,即使对于简单的原型来说,它们也不够用。例如,不可能列出链接到 PC 的所有摄像机,也没有快速调整摄像机参数的方法来。或者,您可以使用 PyGame 或相机制造商提供的 SDK(如果可用)。VideoCapture

在与相机交互的Windows中,通常使用DirectShow。它的主要优势是:

  • 几乎任何相机都提供了一个驱动程序,允许它从 .DirectShow
  • 这是一项成熟且广泛使用的技术。
  • 它基于 COM 框架,因此设计为从不同的编程语言使用。

相反,这是一项相当古老的技术,正在被Windows Media Foundation所取代,Microsoft不再开发它。但这没什么大不了的,因为它具有所需的所有功能,并且用于许多应用程序,以至于(在我看来),Microsoft 将长期保持它可用。

在这里,我想提出一个完全用 Python 编写的简单应用程序,它允许您使用 、在屏幕上显示它们并使用 OpenCV 对它们进行简单的处理。该应用程序基于一个类,该类公开了某些功能,并且可以在其他应用程序中重用。该代码设计为易于更改和扩展。DirectShowDirectShow

使用应用程序

  1. 请确保安装了以下 Python 包:numpymatplotlibopencv-pythoncomtypes
  2. 运行 main.py
  3. 启动应用程序后,将显示对话框“选择视频设备”。选择一个摄像机,然后按下确定

Image 1

  1. 将显示一个允许您选择相机分辨率的屏幕。选择所需的分辨率或保留默认值,然后按确定。
  2. 摄像机直播显示在屏幕的左侧。
  3. 按 Grab 卡普照片,照片将显示在屏幕右侧。您可以使用屏幕右侧的按钮对照片应用一些滤镜,或按保存保存图片。

在 Windows 10 上,如果文本大小已设置为不同于 100% 的值(在 Windows 的“显示设置”屏幕上),则相机的实时图像可能在包含的帧上显示未完全对齐。这似乎是DirectShow的问题,因为我在其他应用程序上也有相同的行为。

简言之DirectShow

DirectShow是编写多媒体应用程序的框架。应用程序的构建基块是一个筛选器,一个执行基本操作的对象,例如:DirectShow

  • 从相机或文件中读取音频\视频
  • 将音频\视频从一种格式转换为另一种格式
  • 将音频\视频渲染到屏幕或文件

滤波器可以具有输入和输出引脚,并且可以将它们连接在一起以执行所需的工作

DirectShow提供一个名为 Filter Graph 的对象,该对象负责收集、链接和运行过滤器。

对于我们的应用程序,我们需要以下过滤器:

  • 相机源过滤器,用于读取相机中的图像
  • 一个过滤器,允许我们对相机提供的每个帧进行一些操作SampleGrabber
  • 在 GUI 上显示摄像机实时流的视频渲染过滤器


http://www.ppmy.cn/news/1440974.html

相关文章

阿里云安装Mysql

阿里云安装Mysql 1、下载mysql包,并解压包2、继续解压文件3、拷贝到安装目录4、创建mysql组和用户5、创建mysql数据目录(根目录)6、赋予权限7、加入路径8、配置文件顺序:9、初始化mysql10、启动mysql(结尾加"&…

【JAVA】一文掌握Java并发编程

Java 开发中,并发编程属于相当重要的一个知识点,可以说,Java 的并发能力,是成就今日 Java 地位的因素之一。Java 的并发编程由浅入深实质上是包含 Java(API)层、JVM(虚拟机)层、内核…

28.Gateway-网关过滤器

GatewayFilter是网关中提供的一种过滤器,可以多进入网关的请求和微服务返回的响应做处理。 GatewayFilter(当前路由过滤器,DefaultFilter) spring中提供了31种不同的路由过滤器工厂。 filters针对部分路由的过滤器。 default-filters针对所有路由的默认…

OpenCV如何使用分水岭算法进行图像分割

OpenCV 使用分水岭算法进行图像分割的基本步骤如下: 加载图像:首先,你需要加载你要进行分割的图像。灰度化:将彩色图像转换为灰度图像,因为分水岭算法通常在灰度图像上操作。预处理:这一步可能包括滤波&am…

RTT学习 MQTT

MQTT背景应用 MQTT是机器对机器(M2M)/物联网(IoT)连接协议,它是专为受限设备和低带宽、高延迟或不可靠的网络而设计的,是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯…

一主双从redis+哨兵模式以及通过Ansible+Shell快速部署redis哨兵模式

目录 一.主redis配置 1.解压并进行编译安装 2.为redis创建软链接和service管理方便启动 3.修改redis的配置文件 二.配置备redis 三.主redis上查看集群状态 1.主redis登录上去查看状态并且创建数据用于验证同步性 2.备redis查看数据是否同步过来 四.模拟测试 1.主redi…

Python数据分析实验二:Python数据预处理

目录 一、实验目的与要求二、实验任务三、主要程序清单和运行结果(一)对chipotle.csv文件的销售数据进行分析(二)对描述泰坦尼克号成员的信息进行可视化和相关分析 四、实验体会 一、实验目的与要求 1、目的:   掌握…

windows、Mac如何安装vue开发环境?

For Mac 安装 Vue.js 开发环境主要包括安装 Node.js、NPM(或Yarn),以及 Vue CLI。 以下是详细步骤: 1. 安装Node.js和npm: Vue.js 需要 Node.js 4.0.0 或以上版本,同时,Node.js 默认包含了 npm&…