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++;
ステッチエンジンで多くのスレッドを動作させたいです。