我有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的內部部分來幫助你並行調用它。 –