Estoy usando opencv y Qt para crear una aplicación. Dentro de la aplicación, estoy creando una pequeña herramienta para grabar video. Por esta razón, y para no bloquear el hilo del evento principal, creé un diálogo separado que contiene un hilo de grabación. En este hilo, para empezar, quería ver la salida de la cámara (todavía no he introducido el código de grabación). Así que una subclase QThread
y la función run()
es la siguiente:OpenCV y Qt VideoCapture no abre la cámara correcta en Windows
void VideoRecordThread::run(){
cv::VideoCapture capture;
cv::Mat frame;
QImage img;
qDebug() << "Opening camera" << cameraIndex ;
capture.open(cameraIndex);
if(!capture.isOpened()){
qDebug() << "Could not open camera" << cameraIndex;
emit threadReturned();
return;
}
while(!stopFlag){
capture >> frame;
qDebug() << "Frame Width = " << frame.cols << "Frame Height = " << frame.rows;
if(frame.cols ==0 || frame.rows==0){
qDebug() << "Invalid frame skipping";
continue;
}
img = cvMatToQImage(frame); //Custom function
emit imageCaptured(img);
}
capture.release();
emit threadReturned(); //Custom signal
qDebug() << "Thread returning";
}
esto se supone que funciona, pero el problema es que cuando el hilo se inicia, aparece un nuevo cuadro de diálogo "de la nada", me pide que seleccione la cámara cuando selecciono una de las cámaras conectadas, a veces funciona y otras no. Aquí está el diálogo que me sale:
Cualquier ayuda en lo que puedo hacer?
¿Qué valor es 'cameraIndex'? – karlphillip
la cámaraIndex es 0 – msmechanized
Si solo hay una cámara o no importa qué cámara se use -1 puede pasar. En Windows, el índice 0 abre ese diálogo para que el usuario seleccione la fuente de video. – karlphillip