我有4个不同的Mat对象被称为4x opencv图像处理函数。OpenCV C++多线程
void processBinary(Mat& binaryMat) {
//image processing
}
我想多线程它使所有4个方法调用在同一时间完成,但有主线程等待,直到每个线程完成。
例:
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(),以便主线程等待每个线程执行,但似乎并没有显着增加执行时间。任何人都可以解释我应该怎么去多线程我的程序?谢谢!
编辑:我曾尝试:
//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();
你描述的工作是一个管道。每个功能都采用前一阶段的输出。要实现并行性,您需要能够在工作流程的各个阶段之间移动较小的工作。换句话说,如果他们需要从其他任务输出,他们如何并行工作。复制Findcontours ...绘制轮廓.... –
我不知道我明白。我想将processBinary()并行放置,因为它被称为4x,而不是方法内部的代码。每个processBinary()在不同的Mat对象上调用,因此它们不依赖于其他对象。 –
啊...你应该添加调用'processBinary'的代码。我们不需要processBinary的内部部分来帮助你并行调用它。 –