2

我在通过 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 亮起 - 任何想法为什么顺便说一句?),第二个没有让我了解如何完成我的任务。一般来说,我的相机在我的 Linux 设备上运行良好——我已经使用 GUI 工具进行了检查。

所以我的问题可以大致分为以下几个方面: 1. 如上所述,您如何访问各个帧?那里的一般方法是什么?您知道的在线具体示例或文章吗?2. 是否可以将我的帧作为易于处理格式的二维数组,例如 RGB?我基本上想通过 (x,y) 坐标访问每个像素并获取 R、G 和 B 通道

我将不胜感激任何帮助,包括链接;我暂时远离原始 API 列表,因为我需要先了解总体思路,但如果没有其他方法,我当然会阅读这些内容:)

4

2 回答 2

2

尝试使用libCVD,它为 v4l2 提供了一个接口。更多细节在这里。我过去使用过 libCVD,它非常简单明了。还可以让您轻松地将图像转换为您喜欢的任何格式,例如您提到的 RGB。

您也可以尝试使用OpenCV,它提供了VideoCapture接口。这些论坛 - (1)(2) - 包含一些您可能会发现有用的代码存根。使用 OpenCV,您也可以灵活地将图像转换为您需要的任何格式。

于 2014-03-18T08:40:18.430 回答
0

谢谢您的帮助!我想保持低水平,并且确实了解 OpenCV。幸运的是,我已经弄清楚如何用 V4L2 做我想做的事情:

  1. 为了获取单个帧,我使用了第二个链接中的代码,并在 process_image() 方法中添加了我的函数调用。这使我可以访问每个新框架。

  2. 我推断我的相机正在 YUY2 中流式传输视频并转换为 RGB,我使用了这个页面: How to convert yuy2 to a BITMAP in C++

于 2014-03-20T15:00:07.420 回答