OpenCV I – Highgui
En este tutorial vamos ha explicar como comenzar ha trabajar con openCV, que es una librería de programación para visión por computador. Vamos a introducir la creación de ventanas en openCV, así como la carga de un archivo de imagen.
Para la creación de una ventana basta con llamar a la siguiente función:
int cvNamedWindow(const char* name, unsigned long flags);
A la que se le pasa como name una cadena de caracteres que identificará de froma única a nuestra ventana y servirá como titulo de nuestra ventana también. El segundo parametro define las propiedades de la ventana, CV_WINDOW_AUTOSIZE o 1 para ajustar la ventana a la imagen mostrada o 0 en otro caso.
Una vez creada nuestra ventana, o ventanas para cargar una imagen simplemente debemos llamar a la función:
IplImage* cvLoadImage( const char* filename, int iscolor CV_DEFAULT(1));
Que como primer parámetro le pasaremos una cadena de caracteres de la imagen que queremos cargar, y como segundo parámetro un valor entero mayor que 0 si queremos que la imagen se carge con 3 canales (rojo, verde y azul), igual a 0 si queremos que se carge con un canal, en escala de grises, o menor que 0 si queremos que se carge según la cabecera del archivo. Los archivos soportados por OpenCV son: Windows bitmaps – BMP, DIB; JPEG files – JPEG, JPG, JPE; Portable Network Graphics – PNG; Portable image format – PBM, PGM, PPM; Sun rasters – SR, RAS; TIFF files – TIFF, TIF. El valor que devuelve esta función es un puntero a una estructura de una imagen (IplImage).
Solo nos falta mostrar una imagen en nuestra ventana que hemos creado, esto se realiza de forma simple con la llamada a la función:
void cvShowImage( const char* name, const CvArr* image );
En la que se le pasa como primer parámetro una cadena de carácteres que identifican a la ventana donde queremos mostrar la imagen y como segundo parámetro la imagen que queremos mostrar.
En el siguiente ejemplo vamos a cargar la misma imagen en rgb y en escala de grises y mostrarlas en dos ventanas distintas, el resultado lo podemos ver en la figura 1:
#include “highgui.h”
#define ventana “Ventana1″
#define ventana1 “Ventana2″
int main(int argc, char* argv[]){
//Comprobamos si han pasado una image como parametro, sino una por defectochar* filename = argc >= 2 ? argv[1] : (char*)”lena.jpg”;
//cargamos la imagen en RGB
IplImage* imagen;
//(archivo,int a) a>0:RGB; a=0:Escala Grises; a<0:la de la imagen
imagen=cvLoadImage(filename,1);
//Cargamos la imagen en Escala de grises
IplImage* imagen1;
//(archivo,int a) a>0:RGB; a=0:Escala Grises; a<0:la de la imagen
imagen1=cvLoadImage(filename,0);
cvNamedWindow(ventana,0);
cvNamedWindow(ventana1,0);
//Mostramos la imagen en la ventana
cvShowImage(ventana,imagen);
cvShowImage(ventana1,imagen1);
for(;;)
{
int key;key = cvWaitKey(0);
if( key == 27 || key == ‘q’ || key == ‘Q’ ) // ‘ESC’, q o Q
break;}
cvDestroyAllWindows();//Destruimos todas las ventanas
return 0;
}

Figura 1
59 Comments + Add Comment
Got anything to say? Go ahead and leave a comment!
Category
- blenderocv (1)
- Personal (2)
- Tutorials (24)
- ActionScript (1)
- Blender (2)
- CSS (1)
- Java and Netbeans (1)
- Linux/Unix (7)
- OpenCV (15)
- OpenGL (1)
- other (4)
- Uncategorized (2)
- Works (2)
Last comments
Tag cloud
Twitter: damiles3D
- Finishing coding a card marker AR functions in API. Next step, facedetection.
- Que tardecita. Después de correr 5km para recoger el coche acabo haciendo un duatlon cogiendo bici para volver en tren. X(
- En el tren de camino al trabajo. Lunes lunero....
- @Neoxisme do you want this list of camera features to set http://t.co/jCqNnWct
- Finished QR integration, and first basic UI OpenGL framework.
- Review Finished, I like this chapter. Now continue developing OpenGL user interfaces and Events management
- Reviwing a book... only review 30 pages and 15 gnuplot scripts.
- @pipotux Siempre que puedas evitar pagar la licencia ;)
- @pipotux Suena dificil! :S
- @joshis_tweets Check this first. Read it http://t.co/3AEMSxRa




Posted under:
Hola cómo están? Estuve probando ejemplos para “levantar” la webcam con OpenCV con C++ y Windows 7.
Incluso corriendo éste ejemplo, logro que la aplicación corra, pero al momento de cargar la cam, me pide que seleccione el dispositivo (tengo una única, la que viene incluída en el notebook), la selecciono y se me sale de la aplicación.
Alguien sabe por qué puede ser? A alguien le pasó?
Les copio a continuación los comentarios que me tira.
————————————————–
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Users\Federico\Documents\F A C U L T A D\Tesis\C++\exemplo3-tutorialOpenCV\Debug\exemplo3-tutorialOpenCV.exe’, Símbolos cargados.
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\ntdll.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\mscoree.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\kernel32.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\KernelBase.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\winsxs\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_none_bb1f6aa1308c35eb\msvcr90d.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Users\Federico\Documents\F A C U L T A D\Tesis\C++\exemplo3-tutorialOpenCV\cxcore100.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\user32.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\gdi32.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\lpk.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\usp10.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\msvcrt.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\advapi32.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\sechost.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\rpcrt4.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\sspicli.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\cryptbase.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Users\Federico\Documents\F A C U L T A D\Tesis\C++\exemplo3-tutorialOpenCV\libguide40.dll’, El binario no se generó con la información de depuración.
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Users\Federico\Documents\F A C U L T A D\Tesis\C++\exemplo3-tutorialOpenCV\highgui100.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.7600.16385_none_ebf82fc36c758ad5\comctl32.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\avifil32.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\winmm.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\ole32.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\msacm32.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\msvfw32.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\shell32.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\shlwapi.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\avicap32.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\version.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\winsxs\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_none_bb1f6aa1308c35eb\msvcp90d.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\winsxs\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_none_bb1f6aa1308c35eb\msvcm90d.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\imm32.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\msctf.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\winsxs\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_d08a205e442db5b5\msvcr80.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\profapi.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\Microsoft.NET\Framework\v2.0.50727\Culture.dll’
‘exemplo3-tutorialOpenCV.exe’: se descargó ‘C:\Windows\Microsoft.NET\Framework\v2.0.50727\Culture.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\assembly\NativeImages_v2.0.50727_32\mscorlib\8c1770d45c63cf5c462eeb945ef9aa5d\mscorlib.ni.dll’
‘exemplo3-tutorialOpenCV.exe’ (administrado): se cargó ‘C:\windows\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll’
‘exemplo3-tutorialOpenCV.exe’ (administrado): se cargó ‘c:\Users\Federico\Documents\F A C U L T A D\Tesis\C++\exemplo3-tutorialOpenCV\Debug\exemplo3-tutorialOpenCV.exe’, símbolos cargados.
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorjit.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\Microsoft.NET\Framework\v2.0.50727\diasymreader.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘ImageAtBase0x70c80000′, No se cargaron símbolos.
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘ImageAtBase0x5080000′, No se cargaron símbolos.
‘exemplo3-tutorialOpenCV.exe’: se descargó ‘ImageAtBase0x70c80000′
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\assembly\GAC_MSIL\mscorlib.resources\2.0.0.0_es_b77a5c561934e089\mscorlib.Resources.dll’, El binario no se generó con la información de depuración.
‘exemplo3-tutorialOpenCV.exe’ (administrado): se cargó ‘C:\windows\assembly\GAC_MSIL\mscorlib.resources\2.0.0.0_es_b77a5c561934e089\mscorlib.resources.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\cryptsp.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\rsaenh.dll’
‘exemplo3-tutorialOpenCV.exe’ (administrado): se cargó ‘C:\windows\WinSxS\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_none_bb1f6aa1308c35eb\msvcm90d.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\assembly\NativeImages_v2.0.50727_32\System\5ba3bf5367fc012300c6566f20cb7f54\System.ni.dll’
‘exemplo3-tutorialOpenCV.exe’ (administrado): se cargó ‘C:\windows\assembly\GAC_MSIL\System\2.0.0.0__b77a5c561934e089\System.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\uxtheme.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\dciman32.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\MMDevAPI.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\propsys.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\oleaut32.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\wdmaud.drv’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\ksuser.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\avrt.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\setupapi.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\cfgmgr32.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\devobj.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\AudioSes.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\msacm32.drv’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\midimap.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\dwmapi.dll’
El subproceso ‘Subproceso Win32′ (0×764) terminó con código 0 (0×0).
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\vfwwdm32.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\clbcatq.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\devenum.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\ntmarta.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\Wldap32.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\wintrust.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\crypt32.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\msasn1.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\msdmo.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\ksproxy.ax’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\d3d9.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\d3d8thk.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\vidcap.ax’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\Kswdmcap.ax’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\mfc42.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\odbc32.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\odbcint.dll’, El binario no se generó con la información de depuración.
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\qcap.dll’
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\SysWOW64\quartz.dll’
El subproceso ‘Subproceso Win32′ (0xbac) terminó con código 0 (0×0).
El subproceso ‘Subproceso Win32′ (0×560) terminó con código 0 (0×0).
‘exemplo3-tutorialOpenCV.exe’: se cargó ‘C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7600.16385_none_421189da2b7fabfc\comctl32.dll’
‘exemplo3-tutorialOpenCV.exe’: se descargó ‘C:\Windows\SysWOW64\vfwwdm32.dll’
‘exemplo3-tutorialOpenCV.exe’: se descargó ‘C:\Windows\SysWOW64\dciman32.dll’
El subproceso ‘Subproceso Win32′ (0×1268) terminó con código 0 (0×0).
El subproceso ‘Subproceso Win32′ (0xdf0) terminó con código 0 (0×0).
El subproceso ‘Subproceso Win32′ (0×164) terminó con código 0 (0×0).
El subproceso ‘Subproceso Win32′ (0x13c) terminó con código 0 (0×0).
El subproceso ‘Subproceso Win32′ (0×514) terminó con código 0 (0×0).
El programa ‘[4160] exemplo3-tutorialOpenCV.exe: Administrado’ terminó con código 0 (0×0).
El programa ‘[4160] exemplo3-tutorialOpenCV.exe: Nativo’ terminó con código 0 (0×0).
Hola macuca, deberías depurar tu aplicación para detectar donde falla, parece ser que sea un problema de acceso a un puntero no inicializado debidamente. O sea el tipico segmentation fault.
Atentament David.
Buenas tardes
Necesito realizar una aplciacion con opencv utilizando Java para mi tesis, q es un sistemad e deteccion d epiezas industriales por color y forma.
Necesito en java porq toda la aplicacion la he desarrollado sobre ese lenguaje y es un objetivo por alcanzar. Les agradezco si me pueden colaborar. Gracias
Hola buenas noches.
En primer lugar gracias por el ejemplo damiles. Tengo un problema con un código similar. El programa compila y muestra la ventana, pero no carga la imágen, creo que no la encuentra. He utilizado la función cvAddSearchPath(“path de mi carpeta”), para indicar donde se encuentra, pero nada. No se si es que tiene que estar en alguna carpeta del propio Visual Studio. Utilizo de todas formas un método diferente al tuyo para cargar la imagen:
IplImage* hoja = cvLoadImage(“tpl_a.bmp”, 1);
cvNamedWindow( “ventana”,0 );
cvShowImage( “ventana”, hoja);
No se cual puede ser el problema. Te agradecería algún consejo
Saludos
Hola, según lo que me comentas, el código que me indicas está correcto. Solo deberías comprobar que el nombre de la imágen, sea el correcto, y esté en el mismo lugar que el ejecutable, en vc++ suele ser la carpeta debug o release que se crean al compilar el proyecto. Además comprueba que tu imágen que estas cargando en RGB sea realmente RGB y no escala de grises.
Atentamente David.
Hola,
estoy desarrollando una aplicación para la universidad politécnica de valencia.Quiero utilizar una tableta Acer Iconia Tab A100 8Gb XE.H6REN.001 con Android 3.0 Honeycomb. ¿Sabes si las camaras que lleva son compatibles con la librería OPENCV? ¿Existe algún sitio dónde mirar las compatibilidades de la cámara con opencv ? (En la web de opencv no indica camaras compatibles para móviles).
Muchas Gracias
Hola Angel, veo que eres compañero de la upv
.
Te comento, no conozco concretamente como trabaja las cámaras android, al ser un sistema unix, si usa el driver v4l no vas a tener ningún problema usando opencv.
No existe un listado de camaras que soporta opencv ya que opencv simplemente recoge las imagenes capturadas de los drivers genericos como puede ser v4l en caso de linux, en caso del osx quictime etc…
De todas formas si necesitas concretar mucho los presets de la cámara te recomiendo que trabajes la interfaz de la camara de forma independiente a opencv y que recogas el vector de los datos de la imagen y pases a una estructura opencv.
Atentamente David.
Voy a hablar con ACER a ver que me cuentan sobre las cámaras
y probaré lo que me has dicho.
Gracias.
Hola q tal, yo tengo un problema, compile todo opencv, mi SO es windows 7, pero al intentar correr un programa incluso los ejemplos me aparece un error, de esta aplicacion a dejado de funcionar y el boton de finalizar, no se porque me tiene loco ese error..
agradeceria la ayuda =D…