我正在编写一个控制台C ++程序,它使用OpenCV库分析颜色(和其他属性)的影片。我使用cap.retrieve()
函数(类似于cap.read()
)遇到了严重的瓶颈。此操作占用我在程序中调用的任何单个函数中的最长时间,并且在读取高清视频时花费的时间要长得多。尽管如此,我运行程序时的CPU利用率仍然低于50%。
我已经决定最好的行动方案是尝试通过每次我想要从视频中读取(或者#34;检索)图像时创建一个新线程来达到充分利用,具有特定的最大值基于CPU规格的线程数。我已经用C ++ 11对多线程的基础知识做了一些阅读,但我不确定从哪里开始。
以下是我想要多线程的代码部分:
// Run until all frames have been read
while(cap.get(CV_CAP_PROP_POS_FRAMES) != cap.get(CV_CAP_PROP_FRAME_COUNT)) {
// look at but do not read the frame
cap.grab();
// only process if user wants to process it
// eg: if resolution = 20 then will only process every 20 frames
if (int(cap.get(CV_CAP_PROP_POS_FRAMES)) % resolution == 0) {
// multithread everything inside this loop??
Mat frame;
// retrieve frame and get data to solve for avg time to retrieve
double t1 = (double)getTickCount();
bool bSuccess = cap.retrieve(frame);
t1 = ((double)getTickCount() - t1)/getTickFrequency();
readT.push_back(t1);
//if not success, break loop
if (!bSuccess) {
break;
}
// Get avg color and data to calculate total avg color
// get data to solve for avg time to calc mean
HIDDEN
// adds a single row of the avg color to the colorCloud mat
HIDDEN
}
}
提前感谢您的帮助。从链接到资源到教程或伪代码的任何内容都将非常感谢!