实现Linux多摄像头同步捕捉(linux多摄像头)
随着linux应用的普及,多摄像头的视频同步捕捉在多领域发挥着重要作用。本文将介绍linux视频多摄像头数据的同步捕捉,实现步骤如下:
首先,要安装对应的摄像头驱动和API,本文选择使用libargus接口来获取摄像头数据,实现视频同步捕捉。首先,检测开发平台是否支持libargus:
#roslocate libargus
#find /usr/include/ -name "argus.h
如果返回值不为NULL,则表明可以正确使用libargus,反之则需要更新驱动以及安装对应的API支持;
接着,linux多摄像头的实现采用的是异步多路感测技术。因此,需要建立多个独立的Capturing Session,以实现多路视频捕捉:
//Initialize multiple sessions
//事先定义一个Session指针数组for (int i = 0; i
Argus::UniqueObj captureSession(cameraProvider->createCaptureSession(device));
session[i] = captureSession.get();}
接下来,可以定义每个摄像机的Stream类,并分别初始化:
//Initialize Streams 定义多路的Stream
for (int i = 0; i Argus::CaptureSession *session_i = session[i];
Argus::UniqueObj streamSettings(session_i->createOutputStreamSettings());
//Specify the preferrable resolution streamSettings->setPixelFormat(Argus::PIXEL_FMT_YCbCr_420_888);
Argus::UniqueObj captureOutputStream(session_i->createOutputStream(streamSettings.get()));
stream[i] = captureOutputStream.get();}
最后,就可以利用上述建立的多路Stream,实现对每个独立摄像头的同步捕捉:
//Start Capturing
for (int i = 0; i Argus::Status status(stream[i]->capture(uid[i]));
//Check capturing status if(status != Argus::STATUS_OK)
{ //Error
}}
以上步骤完成后,linux多摄像头视频数据就可以正常捕捉,同时还可以根据不同应用场景,通过调整streamSetting,实现自定义分辨率、格式等设置;
由此可见,Linux的多摄像头同步捕捉,只需要进行相应的参数设置,通过libargus支持的接口及调用程序,就可以轻松实现。