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

embedded/2024/9/23 4:44:05/

在 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/embedded/27654.html

相关文章

liceo靶机复现

liceo-hackmyvm 靶机地址:https://hackmyvm.eu/machines/machine.php?vmLiceo 本机环境:NAT模式下,使用VirtualBox 信息收集: 首先局域网内探测靶机IP 发现IP为10.0.2.4 开启nmap扫描一下看看开了什么端口 扫描期间看一下web页…

OJ1——轮转数组,消失的数字

题目1——轮转数组 题目来源. - 力扣(LeetCode) 轮转(或称为旋转)数组是一种常见的算法问题,通常指的是将数组中的元素向右或向左移动一定位置,使得数组的元素重新排列。 以下是一个简单的思路&#xff0…

Android 文件传输

经常写adb命令传文件,结果发现Android studio有自带的文件管理器,可以上传下载文件。

PyVista 3D数据可视化 Python 库 一行代码实现裁剪 含源码

简介: Pyvista是一个用于科学可视化和分析的Python库,使3D数据可视化变得更加简单和易用; 只增加一行代码就可以实现裁剪; 1.效果: 2.代码如下: 加载模型数据: 代码实现: import pyvista a…

LeetCode LCR 179. 和为s的两个数字

原题链接:LCR 179. 查找总价格为目标值的两个商品 - 力扣(LeetCode) 题目的意思:通过给定的数组,找出两个值,相加并等于目标值。 第一种思路,暴力枚举,伪代码如下: for (…

设计模式的原则与分类

一、设计模式的原则 1、单一职责原则 一个类只需要负责一种职责即可,一个类发生变化的原因,必然是所负责的职责发生变化 2、接口隔离原则 单一职责原则是接口隔离原则的基础,单一职责原则注重职责的划分,从职责角度进行类和接口…

计算机炸了电子信息也是劝退专业

之前不如,之后不一定。 现在是2024年5月,互联网往年的金三银四,今年变成了铜三铁四,甚至铜铁都不如。🥵 互联网的红利已经消耗殆尽了,高薪是不可持续的。 既得利益者仍然会很有钱,但这个行业后面…

数据结构之树形结构

树形结构的例子非常丰富,涵盖了从自然界的生态系统到计算机科学的各种领域。以下是几个典型的树形结构例子: 1.家族树:在家族谱系中,家族树是一个典型的树形结构。它从一个共同的祖先(根节点)开始&#xff…