2016-11-22 79 views
0

我正在使用opencv和C++进行项目工作。 Opencv的版本是3.1。硬件设置是Nvidia GT460和Intel i7 3820,64Gb RAM。我试图实现多个相机设置,所有相机馈送将合并成一个大马赛克。在早期阶段,4x4以后可能会更大。之后,我将分析这个马赛克并跟踪多个对象。在opencv中创建摄像头源的马赛克,没有明显的延迟

问题是,当我使用Opencv中的捕获命令创建摄像头馈送,然后将其存储到矩阵中时,分析并显示它。两个摄像头源已经有很大的FPS问题。我已经测试了三个USB源以及多个UDP或RTSP流。使用USB时,延迟并不是最大的问题,但FPS就像是在馈送之间切分。使用流方法给我低FPS和高延迟(大约15秒)。我也意识到,即使我有相机指向相同的东西,相机馈送之间也有不同的延迟。

有没有人能帮我解决类似的问题? Opencv的问题是它不能同时分析更多活体饲料吗?

我的继承人合并代码:

merged_frame = Mat(Size(1280, 960), CV_8UC3); 

    roi = Mat(merged_frame, Rect(0, 0, 640, 480)); 
    cameraFeed.copyTo(roi); 
    roi = Mat(merged_frame, Rect(640, 0, 640, 480)); 
    cameraFeed2.copyTo(roi); 
    roi = Mat(merged_frame, Rect(0, 480, 640, 480)); 
    cameraFeed3.copyTo(roi); 
    roi = Mat(merged_frame, Rect(640, 480, 640, 480)); 
    cameraFeed4.copyTo(roi); 
+0

你是否在每个循环中重新创建merged_frame?这种方法基本上是正确的,只是避免不必要的复制或创作。 – Miki

+0

我会为每个摄像头捕捉任务设置一个线程。捕获完成后,向主线程发送msg以更新大帧。 – Ripi2

+0

感谢您的回复,我已经将merged_frame的创建移出了循环,并且它稍微改进了性能,现在我将尝试创建更多线程来查看它是否会更好地执行。 –

回答

1

存在着两种功能hconcatvconcat不属于文档。

你可以看到他们使用的一个例子(如果你所有的摄像头提供的帧都具有相同的分辨率,这很容易)here

这可能会要求您创建临时的Mat对象来存储中间结果,但我认为这是一种更直观的方式来创建帧的镶嵌。