1

感谢您阅读我的帖子。

我有一个多线程的opencv应用程序的问题,我希望你们能帮助我。

我的目标是从视频序列的中间保存 400 帧(以 jpeg 格式)以供进一步检查。

我的代码在单线程中运行良好,但是多线程导致了很多问题,所以我想知道我的理念是否全错了。

就我应该做什么的示意图而言,我最好是:

选项1:以某种方式同时访问单个视频文件(或制作副本?),然后各个线程逐帧循环播放视频,在预定限制之间保存每一帧?例如,线程 1 保存帧 50 到 100,线程 2 保存帧 101 到 150 等。

选项2:打开文件一次,逐帧循环,然后将单个帧传递给一系列独特的线程以执行保存操作。例如,第 1 帧传递给线程 1 进行保存,第 2 帧传递给线程 2 进行保存,第 3 帧传递给线程 1,第 4 帧传递给线程 2 等等。

选项 3:其他一些缓冲区/线程安排,这比上面的更好!

我正在使用带有标准库的 Visual C++。

非常感谢您对此的帮助,

干杯,凯

4

1 回答 1

1

选项 1 是我到目前为止尝试做的,但由于错误,我想知道是否有可能做到这一点!线程通常可以访问同一个文件吗?如何找出我可以拥有多少个线程?

当然,不同的线程可以访问同一个文件,但是支持库是否支持它确实是一个问题。要读取视频流,您可以使用 OpenCV 或 ffmpeg(例如,您可以在同一个应用程序中使用两者,使用 ffmpeg 进行读取,使用 OpenCV 进行处理)。没有看过文档,所以我在这里猜测:任何一个库都应该允许多个阅读器在同一个文件上。

要找出核心数量:

SYSTEM_INFO sysinfo;
GetSystemInfo( &sysinfo );
numCPU = sysinfo.dwNumberOfProcessors;

这篇文章。您将创建一个线程/核心作为起点,然后根据您的性能需求和实际测试更改数量。

于 2013-07-03T14:42:31.040 回答