如何从视觉采集卡访问数据到 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?的主要内容,如果未能解决你的问题,请参考以下文章