OpenCV3.0:将每个进程分布在不同的内核上,以加快处理速度

OpenCV3.0: distributing each process on different core for faster processing.

本文关键字:内核 处理速度 分布 进程 OpenCV3      更新时间:2023-10-16

我的项目的目的是优化我的OpenCV程序,以利用处理器上所有可用的内核。我正在使用 Core-i3 和 2 四核 ARM 板来对各种 OpenCV 应用程序的性能进行基准测试。我对多线程等一些策略很陌生。

下面是一个用于行检测的小示例代码:

void line_detect::detect(UMat & src)
{
Mat threshold, HSV;
cvtColor(src, HSV, CV_BGR2HSV);
inRange(HSV, Scalar(H_MIN, S_MIN, V_MIN), Scalar(H_MAX, S_MAX, V_MAX), threshold);
erode(threshold, threshold, getStructuringElement(MORPH_ELLIPSE, Size(6, 6)));
dilate(threshold, threshold, getStructuringElement(MORPH_ELLIPSE, Size(3, 3)));
vector<Vec4i> lines;
HoughLinesP(threshold, lines, 1, CV_PI / 180, 50, 50, 10);
for (size_t i = 0; i < lines.size(); i++)
{
    Vec4i l = lines[i];
    line(src, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0, 0, 255), 3, CV_AA);
}
imshow("Threshold", threshold);
imshow("Lines detected", src);
cvWaitKey(30);
}

如何在 2 个不同的内核上运行 cvtColor 和 inRange 等函数来并行化此代码?如何实时检查不同的核心性能?

操作系统 - 赢 10IDE - Visual Studio 2015

不需要

cvtColorerode/dilate等并行算法。它已经在内部并行,并在支持的平台上提供最大性能。

你只需要用一些并行后端来构建OpenCV。在Windows上,它可能是Concurrency,TBB,OpenMP等。只需确保在 cmake 日志中启用了此选项之一即可。

例如:

...    
Parallel framework:            Concurrency
...

如何构建OpenCV的说明,你可以在这里找到。

在大多数情况下,如果在函数"外部"并行化此类算法,则无法获得性能优势。