我有一个问题,通过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. 是否有可能将我的框架作为易于处理的格式的2D数组,例如RGB?我基本上想通过(x,y)坐标访问每个像素,并获得R, G和B通道
我很感激任何帮助,包括链接;我现在不会使用原始的API清单,因为我需要首先了解总体思路,但如果没有其他方法,我当然会阅读它们:)
尝试使用libCVD,它为v4l2提供了一个接口。更多细节请点击这里。我过去使用过libCVD,它非常简单和干净。还可以让您轻松地将图像转换为您喜欢的任何格式,例如您提到的RGB。
你也可以尝试使用OpenCV,它提供了一个视频捕获接口。这些论坛(1)和(2)包含一些代码存根,您可能会发现它们很有用。对于OpenCV,您可以灵活地将图像转换为所需的任何格式。
谢谢你的帮助!我想保持低级,并且确实了解OpenCV。幸运的是,我已经知道如何用V4L2做我想做的事情:
-
为了获得单独的帧,我使用了第二个链接中的代码,并在process_image()方法中添加了函数调用。
-
我已经推断出我的相机在YUY2中流媒体视频并转换为RGB,我使用了这个页面:如何在c++中将yuy2转换为位图