gpt4 book ai didi

opencv - 相机同步 OpenCV

转载 作者:太空宇宙 更新时间:2023-11-03 21:12:42 24 4
gpt4 key购买 nike

我有立体相机系统。在我的程序中,我在两个线程中捕获来自每个相机的图像。 (每个相机一个线程)。在我收到每个相机的图像后,我想用 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);
}

请记住,帧是在循环内检索的,如果您退出循环,您将停止从相机接收数据。这是有道理的,对吧?这给您留下了 2 个选择:

  • 以正确的方式处理框架。但是,如果此处理速度很慢,您可能会错过来自相机的几帧,直到下一次 cvQueryFrame() 操作为止。

  • 使用某种缓冲机制存储帧,以便您可以在另一个线程上进行处理。如果您的处理技术对 CPU 要求很高,并且您不想丢失任何帧,这是一个很好的方法。

关于你的第二个问题,我不太清楚你的意思。请进一步说明。

关于opencv - 相机同步 OpenCV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5734908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com