c++ - 多线程 OpenCV 程序

标签 c++ multithreading visual-studio-2010 opencv

感谢阅读我的文章。

我在对 opencv 应用程序进行多线程处理时遇到问题,希望你们能帮我解决。

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

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

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

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

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

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

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

非常感谢您对此的帮助,

干杯,凯

最佳答案

Option 1 is what i have tried to do this far, but because of the errors, i was wondering if it was even possible to do this! Can threads usually access the same file? how do I find out how many threads i can have?

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

要找出核心数:

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

来自 this post .您可以创建一个线程/核心作为起点,然后根据您的性能需求和实际测试更改数量。

关于c++ - 多线程 OpenCV 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17448306/

相关文章:

c++ - 如何使这段代码线程安全?编号++;打印值(ID);

c# - C# 的 Nunit 和代码覆盖率

visual-studio-2010 - F12查找所有引用,不转到定义

visual-studio-2010 - VS2010 和 MSBuild 在组合 C++/C# 解决方案上得到不同的结果

php - 分发用 C 编写的 PHP 扩展的最简单方法是什么

C++ 和 OpenSSL 库 : How can I set subjectAltName (SAN) from code?

c++ - 删除目录的功能仅在调试完成后将其删除 C++

c++ - 将军树高度

c++ - 在控制台中同时输入和输出

java - 使用ArrayList存储扩展线程的类