如何在图像处理中有效地使用线程?

Posted

技术标签:

【中文标题】如何在图像处理中有效地使用线程?【英文标题】:How to Use threads efficiently in Image Processing? 【发布时间】:2013-05-02 08:23:03 【问题描述】:

目标:开发一种在给定图像中查找圆圈的算法

实现部分:VC++ 2010 + 使用opencv库找圈子

输入:ROI (X,y,Width,Height) , IplImage* (Input_Image) 算法:所以这里在给定的 ROI 中调用 Opencv Circle 函数

所以例如:

如果我在图像中有 20 个圆圈,我将有 20 个 ROI

问题:所以每次算法都是基于序列的

输入 -> ROI 函数 -> 在给定的 ROI 中查找圆 -> 返回圆参数 -> 输出

TO DO:需要使用多线程来减少处理时间

我可以使用两个线程并行执行此操作吗???

【问题讨论】:

请只使用线程概念而不是 OpenMP 【参考方案1】:

是的,如果您确保正确处理退货,您可以。一种方法是尽可能使用 OpenMP。

std::vector<ResultType> result;
#pragma omp parallel for shared(image_data) //using openMP
for(int i = 0; i < 20; ++i) 
  result.push_back(CircleRoutine(image_data, ROI[i]));

这应该让你知道你可以做些什么来并行化任务。

注意:如果您的最终结果取决于找到圆圈的顺序,那么您必须按顺序进行。如果没关系,那将是使其并行的完美例程。

注意2:我不知道实现,但OpenCV可能已经线程化循环查找,导致线程化并没有加速。

【讨论】:

以上是关于如何在图像处理中有效地使用线程?的主要内容,如果未能解决你的问题,请参考以下文章

如何在具有霓虹内在函数的多核处理器中有效地使用所有霓虹灯单元

如何在 R 中使用 OpenGL 加速有效地为图像栅格设置动画?

如何在我的 Gatsby 博客网站中有效地显示 GIF 图像?

如何在多点触控序列中有效地处理 UITouch

memcached的设计是否有所不同,以便更好地处理较大的有效负载?是多线程使它更适合于较大的值吗?

Scala如何使用akka actor有效地处理超时操作