我有一套立体相机系统。
在我的程序中,我使用两个线程分别捕获每个相机的图像。(每个相机一个线程)
当我从每个相机接收到图像后,我想用OpenCV处理它们。如何告诉我的程序,两个相机的线程都已经获取了图像,可以开始处理它们了?
我还有一个问题。每个从相机接收到的帧都有一个时间戳,由相机指定。如何匹配时间戳,以便我可以获取在同一时间捕获的两个相机的图像?
我还有一个问题。每个从相机接收到的帧都有一个时间戳,由相机指定。如何匹配时间戳,以便我可以获取在同一时间捕获的两个相机的图像?
你是否曾经使用OpenCV编写过一个应用程序来显示相机捕获的帧?从那里开始。下面的应用程序就是这样做的,并将每个帧转换为其灰度版本:
CvCapture *capture = NULL;
capture = cvCaptureFromCAM(-1); //-1 or 0 depending on your platform
if (!capture)
{
printf("!!! ERROR: cvCaptureFromCAM\n");
return -1;
}
cvNamedWindow("video", CV_WINDOW_AUTOSIZE);
while (exit_key_press != 'q')
{
/* Capture a frame */
color_frame = cvQueryFrame(capture);
if (color_frame == NULL)
{
printf("!!! ERROR: cvQueryFrame\n");
break;
}
else
{
// WOW! We got a frame!
// This is the time to process it since we are not buffering
// the frames to use them later. It's now or never.
IplImage* gray_frame = cvCreateImage(cvSize(color_frame->width, color_frame->height), color_frame->depth, 1);
if (gray_frame == NULL)
{
printf("!!! ERROR: cvCreateImage\n");
continue;
}
cvCvtColor(color_frame, gray_frame, CV_BGR2GRAY);
cvShowImage("Grayscale video", gray_frame);
cvReleaseImage(&gray_frame);
}
exit_key_press = cvWaitKey(1);
}
立即处理帧。但是,如果此处理速度较慢,则可能会错过一些来自相机的帧,直到下一个cvQueryFrame()操作。
使用某些缓冲机制存储帧,以便您可以在另一个线程上进行处理。如果您的处理技术对CPU要求高,并且不想丢失任何帧,则这是一个不错的方法。