Tengo un bucle para tomar imágenes de un framegrabbger de alta velocidad a 250 fps.¿Visualiza la imagen en el segundo hilo, OpenCV?
/** Loop processes 250 video frames per second **/
while(1){
AcquireFrame();
DoProcessing();
TakeAction();
}
Al mismo tiempo, me gustaría que el usuario pueda controlar lo que está sucediendo. El usuario solo necesita ver imágenes a alrededor de 30 fps (o menos). ¿Cómo configuro un segundo hilo que muestra el marco actual cada cierto tiempo?
Thread(){
cvShowImage();
Wait(30); /** Wait for 30 ms **/
}
Estoy en Windows en una máquina Intel quad core que usa MinGW, gcc y OpenCV 1.1. El criterio principal es que el hilo de visualización debe tomar el menor tiempo posible de mi ciclo de procesamiento principal. Cada milisegundo cuenta.
He intentado usar CreateThread()
para crear un nuevo hilo con cvShowImage()
y cvWaitKey()
pero apparently those functions are not threadsafe.
Estoy considerando usar OpenMP, pero algunas personas report problems with OpenMP and OpenCV. También estoy considerando intentar usar DirectX DirectDraw porque aparentemente es muy rápido. pero es looks complicated y evidentally hay problems using Windows DLL's with MinGw.
¿Cuál de estos caminos sería el mejor lugar para comenzar?
¿No es suficiente usar una condición if y una variable de "conteo" de hasta 250 para mostrar cada 8ª captura (250/30)? –
Ah sí. Pero si lo haces, todo el programa se detendrá mientras muestras la octava captura. Toma ~ 10 ms para visualizar una imagen usando cvShowImage. En ese momento ya te has perdido algunos marcos. – AndyL
¿Obtienes 250 fps de una cámara? Si es así, ¿puedes decirme cómo lo hiciste? Eso es extremadamente rápido. – bakalolo