Software para detección y parametrización de objetos.
OpenCV capturando WebCam – Inicio
Aquí dejo un ejemplo de OpenCV utilizando la webcam para mostrar la información por pantalla. Para incluir nuevos procesos solo hay que transformar la imagen entre la captura y la muestra, aplicar los algoritmos correspondientes y resaltar aquello que se considere oportuno.
#include <cv.h>
#include <highgui.h>
int main(int argc, char** argv)
{
// Crea una ventana llamada Original Image con un tamaño predeterminado.
cvNamedWindow(“Original Image”, CV_WINDOW_AUTOSIZE);
// Crea la conexion con la Webcam.
CvCapture* capture = cvCreateCameraCapture(0);
// Variable donde se almazenara el frame sacado de la webcam.
IplImage* originalImg;
// Hago que el ancho del capture sea de 320px
if(cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH,320))
// Ojo! esta condicion puede ser problematica si tu webcam no soporta el ancho de 320 pixels
while(true)
{
// Pongo el frame capturado dentro de la imagen originalImg.
originalImg = cvQueryFrame(capture);
if(!originalImg) break;
// Hago que se vea el frame dentro de la ventana “Original Image”.
cvShowImage(“Original Image”, originalImg);
// Espero a que me pulsen el ESC para salir del bucle infinito.
char c = cvWaitKey(10);
if( c == 27 ) break;
}
// Libera la memoria utilizada por la variable capture.
cvReleaseCapture(&capture);
// Destruye la ventana “Original Image”.
cvDestroyWindow(“Original Image”);
}
February 14, 2010 - 12:44 pm
Puedes echar un vistazo a múltiples blogs con información de utilidad sobre OpenCV desde mi página web: http://www.etsii.urjc.es/~asanz (seccón PFC). También hay info de OpenCV 2.0 que para instalar era algo más engorroso pero que una vez hecho tiene algo más de funcionalidad (filtros de partículas para seguimiento, flujo óptico,…)
February 14, 2010 - 6:48 pm
Gracias Antonio. Lo utilizaré. Estos post los pongo para ir pillando page rank y visitas.
La verdad es que acabo de empezar a trabajar en el diseño y el código. Pero tengo que darle duro. Iré poniendo posts más orientados al desarrollo para informarte mejor.
March 17, 2010 - 3:22 pm
Que tal Luis? Probe tu codigo y en mi notebook que tiene una webcam integrada se llega a conectar, osea me levanta un soporte para webcam de de HP pero luego el programa se cierra automaticamente
if(!originalImg) break;
es la linea que cierra el programa, la verdad que no se cual es el problema, pienso que puede ser que estoy sobre win7, pero todos los otros programas que pueden acceder a la webcam no tienen problema, agradeceria alguna sugerencia.
saludos
March 21, 2010 - 11:30 pm
bien me gustaria que colocaras mas ejemplos sencillos..
March 22, 2010 - 8:31 am
Rodrigo, tu problema es que no se está detectando la cámara. Mira a ver si tienes instalado V4L (Video For Linux)
Meduag, lo haré
May 18, 2010 - 7:22 pm
El código me compila perfecto pero no veo ninguna ventana. Qué será? Ayudaaaaa
May 19, 2010 - 8:01 am
Cuando se ejecuta mira en la terminal a ver que te sale. Supongo que terminará. Ponte antes del while un printf(”\nIniciando…”); y cuando el while termine ponte un printf(”\nFinalizado”);
Soluciones:
· Si lo lanzas, termina y puedes leer el Finalizando es que no te está detectando la webcam.
· Mira a ver si tienes instalado el V4L (Video for Linux)
· Mira a ver si tu webcam necesita drivers propios para Linux.
· Prueba con otro código a ver si te sale alguna imagen.
Supongo que el problema es que no te detecta la webcam. Si no te funciona así, no se que puede ser.
June 24, 2010 - 1:46 am
Hola al correr tu código me aparce
libdc1394 error: Platform failed to get device list, el problema no es con Linux porque he corrido los programas de ejemplo que vien incluidos en el OpenCV y funciona bien la cámara, además de haber probado con la forma que establece la guia rápida de OpenCV, así que creo que el error no está en la falta de algún paquete o de driver
June 24, 2010 - 4:09 pm
Hola, ya encontre cuál es el error, el error estan en la condición
if(cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH,320))
En este caso las webcam tienen un ancho de captura predefinido, por lo tanto esto siempre será falso si nuestra camara no tiene este ancho de frames. Si se omite esta instrucción es posible correr el programa
June 24, 2010 - 4:12 pm
Ok Muchas gracias Wally! Ahora comento esta línea de código por si acaso más personas tienen el mismo problema.
Es importante definir el tamaño de la imagen cuando vas a trabajar sobre diferentes cámaras o no las conoces para tratar esta. Por ejemplo que siempre sean tamaños pares para poder dividirla en dos.
June 28, 2010 - 4:24 pm
Hola, estoy probando tu ejemplo pero no me funciona. Al compilarlo conh wxWidgets me sale:
undefined reference to `cvNamedWindow’
etc….
he añadido la librería pero no me reconoce las funciones? alguna idea?
June 28, 2010 - 4:27 pm
Asegurate de haberl añadido correctamente la libreria.
En este caso utilizaba OpenCV 1.0 (a lo mejor el problema es que utilizar 2.0)
Si utilizas Code::Blocks mírate este post: http://www.openvov.com/blog/?p=113
Suerte! y cuando lo localices, si quieres, cuentanos cual era el problema
June 28, 2010 - 4:56 pm
de momento tube que modificar
#include
#include
por
#include
#include
para que me encontrara las librerias, pero me sigue dando el mismo fallo, no me localiza las funciones :S
June 28, 2010 - 6:18 pm
Solucionado linkando la libreria libsaux.so
Comentar que es opencv 2.1
Por cierto, una vez ejecutado me devuelve
Proces returned 0 (0×0)
July 6, 2010 - 7:05 am
hola soy nuevo en esto, estoy utilizando la ultima version del opencv… y subi el tiempo de espera del waitkey a 1000 para ver ke pasaba… pero nadamas me muestra el frame vacio… al parecer no captura de la camara, itente cambiando por esta instruccion:
cvCaptureFromCAM( CV_CAP_ANY );
cvCaptureFromCAM( 1 );
cvCaptureFromCAM( 0 );
y nada… alguien me puede ayudar??