我正在开发一个增强现实项目,我必须使用OpenCV进行“多标记检测+识别”。我在Windows上,Visual C ++ 2008.我已经完成了单线程部分。
我想知道OpenCV中是否有任何线程机制可以执行类似的任务。还有我可以考虑的其他方法是什么?
我还希望在覆盖3D模型时使用为每个标记生成的旋转和平移矩阵(使用OpenCV)。有没有更好的方法来组织/保存这些数据?
修改
这是一个学术项目,效率和其他事项并不重要。只要它是一个可行的解决方案,它就完美无缺。
答案 0 :(得分:1)
您可以做的是将Boost库与并发队列结合使用。在这里,您可以找到我与boost线程和OpenCV一起工作的concurrent queue。
要将并发队列与OpenCV一起使用,您可以将其解析为:
boost::thread_group frame_workers;
concurrent_queue<IplImage* > frame_queue(&frame_workers);
boost::thread * frame_thread = new boost::thread(frame_grabber, &frame_queue);
boost::thread * marker_thread = new boost::thread(marker_handler, &frame_queue);
frame_workers.add_thread(frame_thread);
frame_workers.add_thread(marker_thread);
在frame_grabber函数中,您可以抓取帧并将它们推入frame_queue。执行此操作时,会通知marker_thread队列中有帧等待(使用wait_and_pop)。抓取部分的一个简短示例可以是这样的:
void frame_grabber(concurrent_queue<IplImage* > * frame_queue) {
frame = cvQueryFrame(input_video);
frame_copy = cvCreateImage(cvGetSize(frame), 8, 3);
cvCopy(frame, frame_copy);
frame_queue->push(frame);
}