我遇到通过V4L2做某事的问题;我也是这方面的初学者,所以链接到一个解释我的一些问题的文档将非常有价值。
所以我的情况是这样的:我正在制作一个计算机视觉模块,我需要的是让相机连续捕捉视频,而不是实际将其保存在磁盘上(或将整个内容存储在内存中),而是允许我处理单个帧。我假设我可能没有处理每一帧的处理能力,所以我需要跳过一些。因此,当我在一帧上完成逻辑操作时,我想抓住我的相机看到的最新内容并对其进行一些处理。同时,正如我所说,我不需要将视频存储在内存中,但如果我有某种容量有限的循环缓冲区就可以了。
我试过这些教程: http://jayrambhia.wordpress.com/2013/07/03/capture-images-using-v4l2-on-linux/ http://linuxtv.org/downloads/v4l-dvb-apis/capture-example.html
但是第一个不起作用(挂在LED上的“检索框架”步骤 - 任何想法为什么btw?)而第二个不能让我理解如何完成我的任务。通常,我的相机在我的Linux设备上工作正常 - 我已经使用GUI工具进行了检查。
所以我的问题可以粗略地分解为以下几点: 1.如何访问如上所述的各个帧?那里的一般方法是什么?你知道在线的任何具体例子,还是文章? 2.是否可以将我的帧作为易于处理格式的2D数组,例如RGB?我基本上想要通过(x,y)坐标访问每个像素并获得R,G和B通道
我很感激任何帮助,包括链接;我暂时远离原始的API列表,因为我需要首先了解一般的想法,但如果没有别的办法,我当然会读到这些:)
答案 0 :(得分:1)
尝试使用libCVD,它为v4l2提供了一个接口。更多细节here。我过去使用过libCVD,它非常简单明了。还可以让您轻松地将图像转换为您喜欢的任何格式,例如您提到的RGB。
您也可以尝试使用提供OpenCV界面的VideoCapture。这些论坛 - (1)和(2) - 包含一些代码存根,您可能会发现这些存根很有用。使用OpenCV,您可以灵活地将图像转换为您需要的任何格式。
答案 1 :(得分:0)
感谢您的帮助!我想保持低水平,并且确实了解OpenCV。幸运的是,我已经想出如何用V4L2做我想要的事情:
为了获得单个帧,我使用了第二个链接中的代码,并在process_image()方法中添加了我的函数调用。这使我可以访问每个新框架。
我推断我的相机在YUY2中流式传输视频并转换为RGB,我使用过这个页面: How to convert yuy2 to a BITMAP in C++