我正在嘗試使用OpenCv拼接從實時視頻相機(更像是全景圖像)的圖像。縫合工作正常。我的問題是,我想要實時完成拼接,例如30 mph左右,但拼接的處理速度很慢。從OpenCv中的實時視頻流拼接圖像
我想使用線程來提高速度,但爲了使用它們,我需要存儲我的實時視頻流還是有任何方法直接使用線程的直播流。
下面是一個示例代碼:
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++;
我想多線程關於針腳發動機的工作。
我想用多線程以更快的速度進行處理。事實上,我打算切換到CUDA。就像你說的那樣,拼接過程只是按順序添加幀,結果圖像是所有幀的拼接圖像。你能給我一個示例代碼來做到這一點。我是新的和無助的。 – Vinshi
您甚至沒有顯示您現有的拼接代碼,並且您要求我爲您編寫一個平行的代碼。我真的無法承擔時間投資。我只是想提供一些可能有用的建議。 – paddy
拼接功能以幀和幀號爲參數:拼接(frame_num,frame)。結果圖像根據幀編號堆疊。代碼對我來說在這裏輸入真的很長。請原諒我。對於這個功能,我想使用線程。所以我想知道是否需要存儲視頻,而不是直接在回調函數中調用拼接函數。 – Vinshi