OpenCV C++ 多线程

2024-06-24

我在 4 个不同的 Mat 对象上调用了 4x 这个 opencv 图像处理函数。

void processBinary(Mat& binaryMat) {
    //image processing
}

我想要对其进行多线程处理,以便所有 4 个方法调用同时完成,但让主线程等待,直到每个线程完成。

Ex:

int main() {

    Mat m1, m2, m3, m4;

    //perform each of these methods simultaneously, but have main thread wait for all processBinary() calls to finish
    processBinary(m1);
    processBinary(m2);
    processBinary(m3);
    processsBinary(m4);
}

我希望实现的是能够根据需要多次调用 processBinary() ,并且具有与仅调用该方法一次相同的效率。我查过多线程,但对调用线程然后加入/分离它们有点困惑。我相信我需要实例化每个线程,然后在每个线程上调用 join() ,以便主线程等待每个线程执行,但执行时间似乎没有显着增加。谁能解释我应该如何对我的程序进行多线程处理?谢谢!

EDIT: 我尝试过的:

//this does not significantly increase execution time. However, calling processBinary() only once does.4

    thread p1(&Detector::processBinary, *this, std::ref(m1));
    thread p2(&Detector::processBinary, *this, std::ref(m2));
    thread p3(&Detector::processBinary, *this, std::ref(m3));
    thread p4(&Detector::processBinary, *this, std::ref(m4));
    p1.join();
    p2.join();
    p3.join();
    p4.join();

实现这一点的巧妙方法不是自己进行线程管理,而是使用提供微并行化的库。

OpenCV本身使用英特尔线程构建模块 https://www.threadingbuildingblocks.org/(TBB)正是为了这个任务——并行运行循环。

在你的例子中,你的循环只有四次迭代。使用 C++11,您可以使用 lambda 表达式非常轻松地将其写下来。在你的例子中:

std::vector<cv::Mat> input = { m1, m2, m3, m4; }
tbb::parallel_for(size_t(0), input.size(), size_t(1), [=](size_t i) {
    processBinary(input[i]); 
});

对于这个例子,我从以下代码中获取了代码here https://software.intel.com/en-us/blogs/2009/08/03/parallel_for-is-easier-with-lambdas-intel-threading-building-blocks.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV C++ 多线程 的相关文章

  • MVC。网络错误:初始化字符串的格式不符合从索引 0 开始的规范

    我的连接字符串是
  • 带方括号的 Uri.EscapeUriString

    这是一个奇怪的问题 但让我们看看它会得到什么样的回应 如果我编写一个控制台应用程序 VS 2013 NET 4 5 1 并执行这行代码 Uri EscapeUriString 我明白了 但是 如果我执行同样的事情 嗯 从技术上来说Uri E
  • 在宏中使用 # [重复]

    这个问题在这里已经有答案了 请解释一下代码 include
  • 将标准库添加到C++ eclipse项目中

    一个 非常 新手 C 问题 有没有办法自动将标准库添加到 C eclipse 项目中 我安装了 CDT 主要功能插件 您可以手动添加 STL 标头的路径路径和符号 gt 包含选项卡 http help eclipse org galileo
  • 如何处理作为参数传递到方法中的 Lambda 表达式 - C# .NET 3.5

    我对 Lambda 表达式的了解有点不稳定 虽然我可以编写使用 Lambda 表达式 又名 LINQ 的代码 但我正在尝试编写自己的方法 该方法采用一些 Lambda 表达式类型的参数 背景 我正在尝试编写一个方法 该方法从任何其他对象类型
  • VS2010中VSHost.exe不断启动

    我正在 VS2010 中使用一个包含大量项目的解决方案 但它不断变得无响应 我注意到的一件事可能是一条线索 尽管我尚未开始任何调试 但 MyApplicationName vshost exe 不断出现在进程列表中 也许每当构建发生时它就会
  • MVVM 同步集合

    是否有一种标准化方法可以将 Model 对象集合与 C 和 WPF 中匹配的 ModelView 对象集合同步 我正在寻找某种类 可以使以下两个集合保持同步 假设我只有几个苹果 并且可以将它们全部保存在内存中 换句话说 我想确保如果我将 A
  • 命令中带空格的 Windows C 系统调用

    我无法使用名称和参数中的空格进行系统调用 例如 system c program files something example exe c my files example txt 我尝试过各种我知道的方法来逃避 但没有任何效果 我努力了
  • 第三方引用的 dll 未被复制来构建

    我有一个第三方 net dll 被我的 dll 类库项目 A 引用和使用 我的控制台应用程序项目 B 引用项目 A 我的问题是第三方 dll 没有被复制到控制台应用程序项目 B 的构建中 这里有什么问题呢 我的 dll 类库中引用的第三方
  • UWP - 绑定枚举差异

    我遇到了一个非常有趣的问题 假设 UWP 应用中有以下 XAML 页面内容
  • 如何“全局”捕获对象实例中引发的异常

    我目前正在编写一个 winforms 应用程序 C 我正在使用企业库异常处理块 遵循我所看到的相当标准的方法 IE 在 Program cs 的 Main 方法中 我已将事件处理程序连接到 Application ThreadExcepti
  • Excel 2007 中的数值 - 底层 xml 文件中的表示与存储

    这个问题与 NET和OpenXml有关 我已经阅读了以下文章 它有很好的解释 但没有回答我的问题 Excel 2007 中数值的可视化与底层 xml 文件不一致 https stackoverflow com questions 58594
  • 如何在Windows Azure上调用ffmpeg.exe转换音频文件?

    我在 Windows Azure 上运行 Web 角色来接收 AAC 音频文件 通过 base64 字符串上传 并将它们存储到 blob 中 现在效果很好 接下来 我还必须将它们转换为 MP3 并将 MP3 存储到 blob 中 我决定使用
  • WPF MVVM后台打印数据绑定问题

    我正在使用 wpf mvvm 开发一个销售点应用程序 在交易生命周期的许多阶段 都会在后台打印收据 我已经使用其他示例在后台生成和打印收据 我正在后台打印一个 UserControl 一切看起来都很棒 然后 我为该控件创建了 ViewMod
  • 是否有理由为什么用 XmlInclude 修饰的基类在序列化时仍然会抛出类型未知的异常?

    我将简化代码以节省空间 但所提供的内容确实说明了核心问题 我有一个类 它的属性是基类型 有 3 个派生类可以分配给该属性 如果我将任何派生类分配给容器并尝试序列化容器 XmlSerializer 会抛出可怕的错误 类型 x 不是预期的 使用
  • SwingWorker 和 Executor 的区别

    我正在使用 SwingWorker 在我正在制作的应用程序上执行一些重负载任务 虽然今天我遇到了 Executor 类和这个例子 Executors newCachedThreadPool execute new Runnable publ
  • 在 C# 中为 ListBox 分配数据源时,如何从 ListBox 中删除所选项目?

    在 C 中为 ListBox 分配数据源时 如何从 ListBox 中删除所选项目 尝试删除时出现错误 设置 DataSource 属性后 无法修改项目集合 但是当我尝试从数据源 数据表 中删除项目时 它会抛出错误 因为 数据行不在当前行集
  • 预览MouseMove 与 MouseMove

    我有相当多的 XAML 经验 但最近我注意到我的大多数同事都使用预览鼠标移动代替鼠标移动事件 我一直用鼠标移动它对我很有帮助 但我忍不住问我什么时候应该使用预览鼠标移动什么时候鼠标移动 有什么区别 各自有什么优点和缺点等等 PreviewM
  • RC4 实现与 openssl 输出不匹配

    我的目标是在 C C 中实现 RC4 流密码 并确保它产生与使用时相同的输出openssl命令 按照伪代码维基百科 https en wikipedia org wiki RC4 该实现似乎有效 因为它可以加密和解密内容 但是 加密的输出与
  • 有关 Endian 性和 .Net 的详细信息?

    我有几个关于字节顺序的问题 这些问题足够相关 我保证将它们作为一个问题提出 1 字节顺序是由 Net还是由硬件决定的 2 如果是由硬件决定的 我怎样才能在C 中找出硬件的字节序 3 字节序是否影响二进制交互 例如 OR AND OR 或移位

随机推荐

  • 无法访问 json 对象属性返回未定义

    我正在从 json 对象访问密钥 但它返回未定义 body Hi date 2016 07 29 07 43 00 var a JSON parse JSON stringify r txt console log a body undef
  • 从命令行执行获取 Apache 文档根(无浏览器)

    不确定标题是否正确 如果您想到更好的标题 请编辑 我有一个从命令行调用的 XMLRPC 服务 它使用 Zend 框架 客户端看起来像这样 server new Zend XmlRpc Client http 主机名 path to xmlr
  • 钻石继承和纯虚函数

    想象一下标准的钻石继承 类 A 定义纯虚函数 fx 类 B 定义 fx 的实现 类 C 和 D 对 fx 不执行任何操作 当尝试在类 D 的实例上调用 fx 时 您将收到 模糊函数调用 错误 尽管 fx 只有一种实现 这可以通过B和C以虚拟
  • 通过匹配模式将字符串替换为另一个文本文件中的行

    我有一个带有对应键 gt 值的文件 sort keyFile txt head ENSMUSG00000000001 ENSMUSG00000000001 Gnai3 ENSMUSG00000000003 ENSMUSG0000000000
  • Java 保存和加载程序的状态

    在我的java项目中 我有几个类 java文件 但在Menu类中 存储了所有使用的内容列表 就数据而言 我存储 6 个列表 2 个 ArrayList 和 4 个 HashMap 其中 1 个在 Menu 类中定义 其他在不同的类中 所以我
  • 带参数和返回值的 Task.Factory.StartNew

    尝试调用需要参数的方法以获得结果并传递结果以继续 但我是任务区域的新手 似乎无法找出正确的语法 任何帮助 将不胜感激 Task Factory StartNew gt CheckConflict startDate endDate actI
  • 可以使用 git 项目并在 VS2013 中查看 TFS 工作项吗?

    所以我升级到了VS2013 希望能顺利进行所有开发 不过有一件事确实让我很恼火 我的团队使用 TFS 而我更喜欢 git 因此我使用 git tfs 来桥接两者以进行源代码控制 我们使用 TFS 工作项来跟踪错误和故事等 如果重要的话 我也
  • Windows 8 网格应用程序中的自定义详细信息页面

    我创建了一个简单的 C Windows 8 网格应用程序 如果您不熟悉这种布局 这里有一个简短的解释 Link http blogs msdn com b window 8 avtar archive 2012 09 24 part 1 c
  • 确定 `constexpr` 执行 - 在编译期间还是在运行时?

    有没有办法实现不同的行为constexpr编译阶段和运行时的函数 考虑以下示例 使用来自D static if constexpr int pow int base int exp noexcept static if std evalua
  • Android 接收外语(例如俄语)Json

    伙计们 美好的一天 我正在尝试接收一些JSON它是用俄语写的 可能也必须以中文接收 主要是在全球范围内 所以我必须收到的任何语言信件JSON 问题是当我收到JSON应该看起来像 file path storage paqstorage pa
  • 如何在selenium中检测javascript文件的加载是否通过ajax加载?

    我的主页通过ajax加载另一个页面 其中有javascript文件 我如何检测ajax页面加载是否在selenium中完成 我可以检查加载的元素 但是有些链接在内部页面中的 javascript 文件完全加载之前是不可点击的 我如何确保这些
  • 如何制作 voronoi 树形图? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 I want to make voronoi treemaps for statistics data like newsgraphy h
  • 破译哪个控件触发了事件

    我有一个包含许多图像的应用程序 这些图像看起来都相同并执行类似的任务
  • Microsoft 文件服务器升级后 Azure 应用服务未重新启动

    上周四 1 月 23 日 我们的 Azure 应用服务出现故障 所有部署槽位 使用 诊断和解决问题 调试功能并深入研究 我发现了这个错误 Platform File Server Upgrade Your application was r
  • url 中的“~”波浪号有什么用? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 URL 中的 波形符有什么用 我正在使用 cPanel 并且有包含波浪号的链接 为什么那里有波浪号 当我们购买服务器空间但没有 dns 或不想将其用于
  • 如何使用 RegexKitLite 转义 NSString 中的特殊字符?

    我正在构建一个使用用户输入的字符串的正则表达式 但该字符串可能包含特殊字符 例如 或 我希望将它们视为文字 而不是通过正则表达式中的特殊含义进行解释 我试过这个 NSString word input stringByReplacingOc
  • 列表框未虚拟化

    我有一个未虚拟化的列表框 我显然错过了一些东西 但找不到它 它实际上是一个列表框内的一个列表框 外部列表框有一个 ItemTemplate 其中包含一个 Expander Expander 用于显示一组项目 Expander 的内容是显示项
  • 当 PHP 认为合适时让 apache 处理 404 错误?

    我完全知道如何在 PHP 中创建自定义 404 页面 但是我想知道是否有一种方法可以将控制权交还给 apache 并让它生成正确的 404 页面 发送正确的标头等 当我的逻辑是这样的时候 我正在看一些apache特定的功能 http php
  • blazor 如何检测授权/未授权

    我正在定制AuthenticationStateProvider在 Blazor 应用程序中进行测试 我担心新类不会具有与 AuthenticationStateProvider 类相同的功能 因为我不确定 AuthenticationSt
  • OpenCV C++ 多线程

    我在 4 个不同的 Mat 对象上调用了 4x 这个 opencv 图像处理函数 void processBinary Mat binaryMat image processing 我想要对其进行多线程处理 以便所有 4 个方法调用同时完成