如何将函数捕获的帧从另一个库传递给 OpenCV 函数?

Posted

技术标签:

【中文标题】如何将函数捕获的帧从另一个库传递给 OpenCV 函数?【英文标题】:How to pass frames captured by a function from another library to the OpenCV function? 【发布时间】:2020-07-28 11:28:44 【问题描述】:

我的相机带有自己的 SDK 和一个用于处理视频流的库。但是相反,它消除了使用开放库的能力(相机根本无法被它们各自的功能识别)。但我需要利用 OpenCV-python 。由于帧无论如何都会传输到 RAM,有没有办法直接从那里捕获它们并从 VideoCapture 类(read()、grab()或其他东西)传递一些函数? 如果有帮助,相机就是 Thorlabs Scientific Camera CM505。

【问题讨论】:

你熟悉链接的概念吗?为他人节省 5 分钟的网络搜索时间:thorlabs.com/software_pages/ViewSoftwarePage.cfm?Code=ThorCam 问题不在于 SDK 的可用性及其文档(如您所决定)。我需要帮助,特别是从内存中获取帧并将它们重定向到 OpenCV 函数。在提供给相机的 SDK 中,这不是(如果是,那就奇怪了)。 不,我发布了该链接,因此任何想要帮助您的人都不必先搜索 SDK。你问志愿者。通过提供链接来珍惜他们的时间。不是每个人都愿意爬过凌乱的 thorlabs 网站。使用 SDK 中的图像数据有什么问题?如果你已经有一个 numpy 数组,我认为你没有理由坚持使用 OpenCV 捕获东西 【参考方案1】:

我快速浏览了他们的 SDK。他们甚至提供了 Python API。所以我不确定你的问题是什么。

您将图像数据作为嵌入在 Frame 对象中的 numpy 数组获取。您可以直接将其填充到 OpenCV 中。

来自手册:

框架

class thorlabs_tsi_sdk.tl_camera.Frame(image_buffer, frame_count,
time_stamp_relative_ns_or_null)

保存轮询相机返回的图像数据和帧数 一张图片。

属性

image_buffer

np.array(dtype=np.ushort):像素数据的 Numpy 数组。这个数组是 临时的,在轮询另一张图片后可能会失效, 重新启动相机,或关闭相机。

如果您坚持从 OpenCV 访问相机,请查看 https://docs.opencv.org/master/d0/da7/videoio_overview.html

我没有在任何列表中找到 Thorlabs,因此您可能必须自己集成它。但我认为没有任何理由这样做。用SDK控制摄像头,用OpenCV处理图像

【讨论】:

以上是关于如何将函数捕获的帧从另一个库传递给 OpenCV 函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何将音频帧从输入 .mp4 传递到 libavcodec 中的输出 .mp4?

如何使用 OpenCV 区分不同的车牌

如何将 jpeg 帧从 java 客户端流式传输到 python 服务器

在 Python 中将 openCV 图像转换为 PIL 图像(用于 Zbar 库)

opencv读取ENVI标准格式

OpenCV 捕获多个 RTSP 流 - Python