【发布时间】:2014-03-13 09:01:50
【问题描述】:
我正在编写一个程序,它可以读取多个网络摄像头,将图片拼接在一起并将它们保存到一个视频文件中。
- 我应该使用线程来捕获图像并将生成的大图像写入文件吗?
- 如果是,我应该使用 c+11 还是 boost?
- 您是否有一些简单的示例代码来说明如何避免赛车条件?
我已经找到了this thread,它使用线程进行写入,但它似乎无法避免出现竞速情况。
我的程序的伪代码:
camVector //vector with cameras
VideoWriter outputVideo //outputs the video
while(true){
for(camera:camVector){
camera.grab() //send signal to grab picture
}
picVector = getFrames(camVector) //collect frames of all cameras into a Vector
Mat bigImg = stitchPicTogether(picVector)
outputVideo.write(bigImg)
}
【问题讨论】:
-
关于比赛条件:你能详细说明你的缝合吗?它是简单地平铺还是涉及边缘混合?
-
如有疑问,请避免使用线程。 (顺便说一句,捕获已经在运行一个单独的线程以进行 img 检索)
-
@berak:如有疑问,请避免 *** 可以谈论任何事情!硬件限制决定了并行性将继续存在,因此更好地使用它;)
-
@Antoine:
Mat bigImg被分成几个不重叠的Mat subimg。捕获的帧通过remap(使用仿射变换)复制到 bigImg 的正确 subImg 部分。完成所有帧的复制后,可以保存帧。 -
酷,如果没有重叠,那么您可以安全地并行执行
remaps。
标签: c++ multithreading opencv