我正在尝试使用 OpenCv 拼接来自实时摄像机(更像是全景图)的图像。缝合工作正常。我的问题是,我希望以 30 英里/小时左右的速度实时完成拼接,但拼接的处理速度很慢。
我想使用线程来提高速度,但为了使用它们,我需要存储我的实时视频流,或者有什么方法可以直接将线程用于实时流。
这是一个示例代码:
SapAcqDevice *pAcq=new SapAcqDevice("Genie_HM1400_1", false);
SapBuffer *pBuffer = new SapBuffer(20,pAcq);
SapView *pView=new SapView(pBuffer,(HWND)-1);
SapAcqDeviceToBuf *pTransfer= new SapAcqDeviceToB(pAcq,pBuffer,XferCallback,pView);
pAcq->Create();
pBuffer->Create();
pView->Create();
pTransfer->Create();
pTransfer->Grab();
printf("Press any key to stop grab\n");
getch();
pTransfer->Freeze();
pTransfer->Wait(5000);
printf("Press any key to terminate\n");
getch();
上面的代码用于捕获实时流。XferCallback 函数用于对帧进行处理。在这个函数中,我调用我的缝合引擎。由于引擎的处理速度很慢,我想使用线程。
这是回调函数的示例代码:
SapView *pView = (SapView *) pInfo->GetContext();
SapBuffer *pBuffer;
pBuffer = pView->GetBuffer();
void *pData=NULL;
pBuffer->GetAddress(&pData);
int width=pBuffer->GetWidth();
int height=pBuffer->GetHeight();
int depth=pBuffer->GetPixelDepth();
IplImage *fram;
fram = cvCreateImage(cvSize(width,height),depth,1);
cvSetImageData(fram,pData,width);
stitching(frame_num , fram);
cvWaitKey(1);
frame_num++;
我想要许多线程在缝合引擎上工作。