Voy ha hacer un pequeño tutorial para aquellos que quieran empezar con openCV y C++.
Previamente os tendríais que mirar el siguiente enlace donde se explica cómo compilar aplicaciones OpenCV con Dev-C++:
http://ionthas.wordpress.com/2008/11/18/howto-compilar-opencv-en-dev-c/
Ahora que ya podemos compilar una aplicación OpenCV vamos a por el código:
#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 con eso la altura se adaptara.
if(cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH,320))
while(true) {
// Pongo el frame capturado de “capture” 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”);
}
PD. El código esta explicado en los comentarios.
Aquí una imagen y el archivo del programa:

HelloWorld OpenCV en funcionamiento
Código de la aplicación: HelloWorldOpenCV
Saludos, Ionthas.
Todavía no consigo que funcione por problemas de compilar que pone que no encuentra la librería highgui110.dll, pero de todas formas para el que lo copie directamente aviso que las comillas en el nombre de la ventana están mal no es: ”Original Image” sino “Original Image” por lo menos me da correcto al escribir
Hola muy bueno el articulo. He empleado tu ejemplo sobre Dev C++ y me sale esto en el compilador:
C:\Dev-Cpp\Bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe: cannot find -lconio
collect2: ld returned 1 exit status
make.exe: *** [HelloWorldOpenCV.exe] Error 1
Execution terminated
y no se por que me falla por que aparentemente todo va bien. Escribeme, please. Un saludo
Buenas, Juan Antonio.
Creo que ese error te sale porque utilizas la libreria conio.h, ya que es una libreria de Borland. Por lo que utilizando Dev-C++ no se si serà un problema.
Saludos, Ionthas.
tenes que linkear la libreria conio en varias paguinas te dan a conoces como
tengo un incobeniente e podido compilar lo anterior pero cuando se ejecuta prende y apaga la camara ya tiene todas las dll en el system32 otros ejemplos los compila y ejecuta bien como los samples que vienen con la libreria
alguna idea de como cambiarle el nombre a la imagen guardada con la funcion cvSaveImage(“salida.bmp” ,frame); para que el archivo salga salida1.bmp ,salida2
y asi hasta salir del programa
La respuesta al problema.
int photoCount = 0;
char photoName[100];
sprintf(photoName, “C:\\StoredImages\\AutonomousMode%i.jpg”, photoCount);
cvSaveImage(photoName, parFrame);
Saludos!
listo muchas grasias me sirvio le tube qe agregar el photoCount++; para que aumente de numero
ami no me sale pueden poner el codigo completo
Hola,
Yo tengo una duda, ¿cómo puedo hacer para cargar una foto y que me detecte los puntos salientes?
Muchas gracias de antemano por su ayuda
Hola que tal,
exelente tutorial y buen ejemplo pero tengo un problema,
cuando compilo el codigo lo que hace es que prende la camara por unos instantes, no se ve imagen en la pantalla y despues se apaga.
Gracias porla ayuda
Hola, estoy comenzando con opencv y me a funcionado correctamente, gracias, si tenes mas tuturiales publicalos.
Gracias por la ayuda
En la linea
if(cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH,320))
me di cuenta que por esa razon se abre y se cierra inmediatamente
y puse
if(!cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH,320))
con esto funciono el programa
Podrias darme mas informacion sobre esta funcion? ya que en la documentacion no encontre bien que devuelve la función al encontrar un error, que me supongo es lo que sucede
Saludos
hola como esta lo mandoa compilar
y me sombrea cvNamedWindow(“Original Image”,
donde creo esa ventana llamada original
me ha funcionado perfect, me suscribo al blog porque veo que tambien tocas robótica como yo,
He metido el compilador OpenCv en Dev C, y he intentado compilar un un codigo sencillo:
//librerias iniciales para poder trabajar con las imagenes
#include “highgui.h”
#include
#include
#include
//inicio el programa
int main(int argc, char *argv[])
{
//cargo la imagen
IplImage* img = cvLoadImage( “lena3.jpg”,1 ); //lena es el nombre de la imagen Aqui pueden colocar cualquiera
//para los canales de rgb
IplImage* r = cvCreateImage( cvGetSize(img), IPL_DEPTH_8U, 1 );
IplImage* g = cvCreateImage( cvGetSize(img), IPL_DEPTH_8U, 1 );
IplImage* b = cvCreateImage( cvGetSize(img), IPL_DEPTH_8U, 1 );
//para crear las imagen en hsv
IplImage* hsv = cvCreateImage( cvGetSize(img), 8, 3 );
//cambiamos de rgb a hsv
cvCvtColor(img, hsv, CV_BGR2HSV);
// para sacar canales de la imagen RGB
cvSplit( img, r, g, b, NULL );
//nombre de las ventanas a crear
cvNamedWindow(“Imagen HSV”, CV_WINDOW_AUTOSIZE);
cvNamedWindow( “Imagen RGB”, CV_WINDOW_AUTOSIZE );
//para los canales rgb
cvNamedWindow( “Canal R”, CV_WINDOW_AUTOSIZE );
cvNamedWindow( “Canal G”, CV_WINDOW_AUTOSIZE );
cvNamedWindow( “Canal B”, CV_WINDOW_AUTOSIZE );
//muestro las imagenes
cvShowImage( “Imagen RGB”, img );
cvShowImage( “Imagen HSV”, hsv);
//para los canales rgb mostrar
cvShowImage( “Canal R”, r);
cvShowImage( “Canal G”, g);
cvShowImage( “Canal B”, b);
//espera la tecla Esc para salir cuando se presione
cvWaitKey(0);
//para destruir las ventanas aunqe no es necesario “eso creo jejje”
cvDestroyWindow(“Ejemplo”);
return 0;
}
y al compilar sale el siguiente error
Compilador: OpenCv
Ejecutando g++.exe…
g++.exe “C:\Dev-Cpp\p1.cpp” -o “C:\Dev-Cpp\p1.exe” -g3 -I”C:\Dev-Cpp\lib\gcc\mingw32\3.4.2\include” -I”C:\Dev-Cpp\include\c++\3.4.2\backward” -I”C:\Dev-Cpp\include\c++\3.4.2\mingw32″ -I”C:\Dev-Cpp\include\c++\3.4.2″ -I”C:\Dev-Cpp\include” -I”E:\Archivos de programa\OpenCV\cv\include” -I”E:\Archivos de programa\OpenCV\cvaux\include” -I”E:\Archivos de programa\OpenCV\cxcore\include” -I”E:\Archivos de programa\OpenCV\otherlibs\highgui” -L”C:\Dev-Cpp\lib” -L”E:\Archivos de programa\OpenCV” -lhighgui -lcv -lcxcore -lcvaux -g3
C:\Dev-Cpp\Bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe: cannot find -lhighgui
collect2: ld returned 1 exit status
Ejecución Terminada
Buenas Leo.
Por lo que veo parece que no has linkeado bien las librerías. Has seguido el post donde explico como hacerlo? Te dejo el link.
http://ionthas.wordpress.com/2008/11/18/howto-compilar-opencv-en-dev-c/