Ho un loop per scattare immagini da un framegrabbger ad alta velocità a 250fps.Visualizza l'immagine nella seconda discussione, OpenCV?
/** Loop processes 250 video frames per second **/
while(1){
AcquireFrame();
DoProcessing();
TakeAction();
}
Allo stesso tempo, vorrei che l'utente fosse in grado di monitorare cosa sta succedendo. L'utente deve solo vedere le immagini a circa 30 fps (o meno). Come posso impostare un secondo thread che visualizza il frame corrente ogni tanto?
Thread(){
cvShowImage();
Wait(30); /** Wait for 30 ms **/
}
Sono su Windows su una macchina quad core Intel utilizzando MinGW, gcc e OpenCV 1.1. Il criterio principale è che il thread di visualizzazione deve impiegare il minor tempo possibile dal mio ciclo di elaborazione principale. Conta ogni millisecondo.
Ho provato a utilizzare CreateThread()
per creare una nuova discussione con cvShowImage()
e cvWaitKey()
ma apparently those functions are not threadsafe.
Sto pensando di utilizzare OpenMP, ma alcune persone report problems with OpenMP and OpenCV. Sto anche considerando di provare a utilizzare DirectX DirectDraw perché apparentemente è molto veloce. ma è looks complicated ed evidentemente ci sono problems using Windows DLL's with MinGw.
Quale di queste strade sarebbe il miglior punto di partenza?
Non è sufficiente utilizzare solo una condizione if e una variabile "count" fino a 250 per visualizzare ogni ottava cattura (250/30)? –
Ah si. Ma se lo fai, allora l'intero programma si bloccherà mentre visualizzi l'ottava cattura. Ci vogliono ~ 10 ms per visualizzare un'immagine usando cvShowImage. A quel punto hai già perso alcuni fotogrammi. – AndyL
Stai ricevendo 250 fps da una fotocamera? Se sei puoi dirmi come hai fatto? È estremamente veloce. – bakalolo