【发布时间】:2013-07-03 12:42:26
【问题描述】:
感谢您阅读我的帖子。
我对一个 opencv 应用程序进行多线程处理时遇到了问题,我希望你们能帮助我解决这个问题。
我的目标是从视频序列的中间保存 400 帧(JPEG 格式)以供进一步检查。
我的代码在单线程中运行良好,但多线程导致了很多问题,所以我想知道我的理念是否全错了。
就我应该做什么的示意图而言,我最好:
选项 1:以某种方式同时访问单个视频文件(或制作副本?),然后让各个线程逐帧循环播放视频,当每个帧在预定限制之间时保存它?例如。线程 1 保存帧 50 到 100,线程 2 保存帧 101 到 150 等等。
选项2:打开文件一次,逐帧循环,然后将单个帧传递给一系列独特的线程以执行保存操作。例如。第 1 帧传递给线程 1 进行保存,第 2 帧传递给线程 2 进行保存,第 3 帧传递给线程 1,第 4 帧传递给线程 2 等等。
选项 3:其他一些缓冲区/线程安排,这是一个比上面更好的主意!
我正在使用带有标准库的 Visual C++。
非常感谢您在这方面的帮助,
干杯,凯
【问题讨论】:
-
我会先尝试选项 1,这似乎很明智,没有线程必须共享数据,这是简单的情况(实际上选项 2 可能不必共享数据)。但是选项 1 似乎更有效,现在建议是“尝试两个选项,看看哪个表现更好;-) 使用尽可能多的线程作为你拥有的核心。人们希望 OpenCV 有一种方法来指定你想要开始的帧范围使用,因此每个线程不必从第 0 帧开始。
-
嗨,Chris O,感谢您的回复,选项 1 是我迄今为止尝试做的,但由于错误,我想知道是否有可能做到这一点!线程通常可以访问同一个文件吗?如何找出我可以拥有多少个线程?干杯,凯
标签: c++ multithreading visual-studio-2010 opencv