如何从视觉采集卡访问数据到 opencv?

Posted

技术标签:

【中文标题】如何从视觉采集卡访问数据到 opencv?【英文标题】:How to access data from the vision capture cards to opencv? 【发布时间】:2019-02-15 12:19:46 【问题描述】:

我正在尝试将数据从内窥镜获取到我在 python 中的 opencv 代码中。内窥镜机器有一个 dvi 输出,我有一个 Datapath 视觉采集卡,可以帮助将它读入我的系统。我知道 opencv 只能从 USB 摄像头或 ip 网络摄像头读取。我想知道是否有人对opencv进行过这种阅读? 非常感谢指针。

【问题讨论】:

您可以使用 ffmpeg 或 gstremer 从内窥镜捕获吗? 我现在可以使用卡附带的应用程序从内窥镜获取流。 Windows、Linux? 我用的是windows 这张卡有一个DirectShow接口。 OpenCV 必须与之兼容。尝试在 VideoCapture 上设置 DSHOW 后端:docs.opencv.org/3.4/d0/da7/videoio_overview.html 【参考方案1】:

这是我在论坛中找到的答案,如果这可能有任何帮助!我不知道 dvi - ffmpeg 之间的区别!检查是否有将 dvi 输出转换为 ffmpeg 的选项。

----------在下面回答----------- -

我正在尝试通过 ffmpeg 管道传输到标准输出,以便 OpenCV 可以读取它。似乎 streamlink 可以直接通过管道传输到标准输出。当我有机会的时候,我也可能会搞砸。

终于明白了。我以前将图像保存到磁盘然后将它们读入opencv。这行得通,但此解决方案有助于避免恒定图像流的磁盘写入/读取成本。最终为我解决的是:

使用命名管道 将 ffmpeg 输出通过管道传输到命名管道 然后使用 cv2.VideoCapture 从该管道中读取 创建命名管道:

if os.path.isfile("/tmp/stream"):
    os.remove("/tmp/stream")
else:
    call(["mkfifo", "/tmp/stream"])

ffmpeg 调用:

p = Popen(["ffmpeg -c:v h264 -i pipe:0 -r 1 -f image2pipe - > /tmp/stream"], stdout = PIPE, bufsize=10**8, shell=True)
recordStatus = p.poll()        # check PIPE status every once in a while to make sure it hasn't closed early

用opencv读取:

path = "/tmp/stream"
raw_image = cv2.VideoCapture(path)
ret, frame = raw_image.read()

希望这会有所帮助!

【讨论】:

感谢您的提示,但当我尝试从命令行使用 ffpeg 输入设备列表中看到的设备名称时,我似乎遇到了麻烦。因此,读取不会发生。有什么建议吗??【参考方案2】:

可以将 DVI 流写入文件,FFMPEG/gstreamer 读取文件流,然后将输入通过管道传输到 OpenCV。

【讨论】:

我可以使用 ffmpeg 读取数据并将其写入文件,但我希望将 DVI 流中的连续数据流输入到我的 opencv 代码中。

以上是关于如何从视觉采集卡访问数据到 opencv?的主要内容,如果未能解决你的问题,请参考以下文章

手把手教你使用LabVIEW人工智能视觉工具包快速实现图像读取与采集

基于opencv的人脸采集训练及识别应用

opencv怎么采集yuy2图像

opengl和opencv的区别

基于CAN总线多视觉传感器测控系统的设计

如何用MapReduce程序对采集到的数据进行预处理?