Procesamiento de Imgenes Mster NI Guin de prcticas Sesin 2. !so de OpenCV en Qt Creator DESCRIPCIN OpenCV (Open Source Computer Vision Librar! es una li"rer#a de $unciones en C y C%% &ue contiene un con'unto de utilidades de procesamiento de imgenes( )isin arti$icial( reconocimiento de patrones( captura de )#deo y )isuali*acin de imgenes. +s de cdigo a"ierto( gratuita( multiplata$orma ,disponi"le para entornos MS -indo.s( Mac OS y /inu01( rpida( de $cil uso y en continuo desarrollo. Pginas .e" de OpenCV2 3ttp244openc).org OpenCV $ue desarrollada originalmente por Inte". 5ctualmente es un proyecto li"re pu"licado "a'o "icencia #SD( lo &ue permite su uso tanto para aplicaciones comerciales como no comerciales. !saremos OpenCV $%&%'%(( &ue $ue pu"licada en 'ulio de 2678. 7 OpenCV 9escripcin Instalacin !so de la li"rer#a +l tipo imagen Crear imgenes +4S "sica :esumen Procesamiento de Imgenes Guin de Prcticas Sesin 2. Instalacin y uso de OpenCV en Qt Creator INS)*L*CIN DE OpenCV $%&%' ;. /os arc3i)os de la li"rer#a OpenCV 2.<.=.6 se pueden descargar en2 3ttp244source$orge.net4pro'ects4openc)li"rary ,Igual &ue di'imos con Qt( es posi"le &ue en este momento e0ista alguna )ersin ms reciente de OpenCV. Por compati"ilidad( recomendamos usar para nuestras prcticas la )ersin 2.<.=.1 =. +l pro"lema es &ue la distri"ucin o$icial de"e ser recompi"ada completamente para poder ser usada con Qt Creator. >ay &ue con$igurarla con C+a,e $%-%.. y compilarla con +inG/ &%-%(. Por lo tanto( para e)itarnos todos estos pasos( usaremos una distri"ucin propia preparada para Qt Creator 2.?.2@ la llamaremos OpenCV 2.<.=.g. ?. Descar0ar el $ic3ero2 3ttp244dis.um.es4Aginesgm4$iles4doc4pa)4openc)2.<.=.g.*ip B. Descomprimir el CIP en C12OpenCV$%&%' conser)ando todos los directorios del arc3i)o. odos los documentos se de"en instalar "a'o este directorio. D. Para completar la instalacin( de"emos incluir en el P*)3 de" sistema el directorio donde se encuentran las 9// de OpenCV. Para ello( de"emos ir a2 Pane" de Contro" 4 Sistema 4 Con5i0uracin a6an7ada de" sistema 4 Opciones a6an7adas 4 Variab"es de entorno8 4 Variab"es de" sistema. Seleccionamos la )aria"le llamada Pat9 y le damos al "otn Editar8 Se a"re una )entana para editar su )alor. 9entro de Va"or de "a 6ariab"e1 al $inal de lo &ue 3aya escrito aEadimos lo siguiente ,o"ser)ar &ue el punto y coma sir)e para separar entradas del path12 @C2FOpenCV2.<.=F"in@C2FQtFQt;.7.6F;.7.6Fming.<BG82F"in /uego le damos a *ceptar a todas las )entanas &ue tenemos a"iertas. 76. Vamos a anali*ar a3ora la estructura de directorios creada en la li"rer#a2 C12OpenCV$%&%' bin H 5rc3i)os 9// ,9ynamic /inI /i"rary1( y algunos e'ecuta"les de prue"a( test e in$ormacin de las li"rer#as. modu"es H Cdigo $uente del nJcleo de la li"rer#a ,core1( y de los distintos mdulos de procesamiento de imgenes ,im0proc1( deteccin de o"'etos ,ob:detect1( entrada4salida ,9i090ui1( etc. inc"ude2openc6$ H Contiene los $ic3eros de ca"ecera necesarios para incluir en los programas C4C%%. +l importante es2 openc6$2openc6%9pp. docs H 9ocumentacin de las li"rer#as. /a parte principal de la documentacin ,el manual de re$erencia de OpenCV1 est en el $ic3ero openc6$re5man%pd5. "ib H Kic3eros de descripcin de las li"rer#as. Necesarios para usar las 9// en nuestros programas de Qt Creator. samp"es2c y samp"es2cpp H Programas sencillos en C y C%% &ue muestran di)ersas $unciones de OpenCV. 2 Procesamiento de Imgenes Guin de Prcticas Sesin 2. Instalacin y uso de OpenCV en Qt Creator ;rdpart( apps( cma,e( data( p"at5orms H Otros directorios &ue en principio no nos interesan. Contienen cdigo $uente de los e'emplos y de otras partes del proyecto. :ecordar &ue OpenCV es de cdigo a"ierto. 77. +'ecutar los e'emplos de samp"es2c y samp"es2cpp y o"ser)ar el cdigo de alguno de ellos. O'o( puede &ue algunos no $uncionen( por&ue necesitan una cmara o parmetros adicionales. 72. +c3ar un )ista*o a la documentacin ,openc)2re$man.pd$ y openc)Gc3eats3eet.pd$1. <SO DE L* LI#RER=* OPENCV CON >) CRE*)OR 78. /a utili*acin de OpenCV en >t Creator permite apro)ec3ar la potencia de la primera para el procesamiento e$iciente de imgenes y )#deo( y la 5aci"idad de la segunda para el desarrollo rpido de aplicaciones interacti)as en entornos de )entanas. 5dems( am"as son multiplata$orma. 7<. +l cdigo de las li"rer#as se encuentra en 5ic9eros DLL ,Dynamic Link Library1( como "ibopenc6?core$&'%d""( "ibopenc6?im0proc$&'%d"" y "ibopenc6?9i090ui$&'%d"". /os $ic3eros 9// contienen cdigo o"'eto ,cdigo e'ecuta"le1 &ue se enla*a de $orma dinmica con la aplicacin. Por lo tanto( nuestros programas usan estas li"rer#as( pero no las incluyen en su cdigo. Los 5ic9eros DLL deben estar accesib"es@ o bien en e" mismo directorio de" pro0rama o en e" P*)3 de" sistema% Por lo tanto( para distribuir nuestros pro0ramas a otras personas( de"emos copiar esos arc3i)os 9// en el mismo directorio del e'ecuta"le. 7;. Para poder usar OpenCV en nuestros proyectos necesitamos( "sicamente( dos cosas2 ,a1 dentro del cdigo( poner los Ainc"udes de los $ic3eros de ca"ecera adecuados@ y ,"1 dentro del proyecto de Qt Creator( aEadir los $ic3eros de descripcin de las 9//( con e0tensin %d""%a. 7=. Vamos a ponernos manos a la o"ra. *brir >t Creator. Crear un nue6o proecto de tipo >+ain/indoB ,)er los pasos del ? al 7< de la sesin 71. Vamos a )er a3ora todo lo necesario para poder usar OpenCV en este proyecto. 7?. 9entro del modo +dit( abrir e" 5ic9ero principa" de" proecto ,el $ic3ero con e0tensin %pro1. 7B. *Cadir las siguientes l#neas al $inal de dic3o $ic3ero2 INCLUDEPATH += "C:\OpenCV2.4.6\include" LI! += "L"C:\OpenCV2.4.6\li#"\ "lli#$penc%&c$'e246\ "lli#$penc%&i()p'$c246\ "lli#$penc%&*i)*)ui246 /a primera de estas l#neas aEade el directorio de OpenCV al path de "Js&ueda de los $ic3eros de ca"ecera. /as siguientes sir)en para aEadir los $ic3eros de descripcin de las li"rer#as 9// ,se re$ieren a los $ic3eros %d""%a1. 7D. Kinalmente( en todos los mdulos del programa &ue usen OpenCV de"emos aCadir "as dos si0uientes "Dneas2 8 Procesamiento de Imgenes Guin de Prcticas Sesin 2. Instalacin y uso de OpenCV en Qt Creator #include <opencv2/opencv.hpp> using namespace cv; 26. Vamos a3ora a aCadir a"0o de cdi0o al proyecto( para compro"ar &ue todo 3a ido "ien. 5Eadimos al principio del cdigo2 #include <QFileDialog> 9espuLs aEadimos un "otn al $ormulario. +n el slot c"ic,ed(! asociado a su pulsacin escri"imos el siguiente cdigo2 void MainWindow::on_pushu!!on_clic"ed#$ % Q&!'ing nom('e) QFileDialog::ge!*penFile+ame#$; Ma! img) im'ead#nom('e.!o&!d&!'ing#$$; namedWindow#,-magen,. W-+D*W_+*/M01$; imshow#,-magen,. img$; 2 27. Guardar el proyecto y e'ecutarlo. MSe 3a compilado "ienN MSe )e la imagen al pulsar el "otnN Si la respuesta es s#( todo 3a ido per$ecto. +n otro caso( )ol)er a repasar los pasos anteriores. Si sigue sin $uncionar( preguntar al pro$esor. EL )IPO DE D*)OS I+*GEN1 +,- 22. !na )e* &ue sa"emos utili*ar la li"rer#a OpenCV en Qt Creator( )amos a empe*ar a mane'ar imgenes y las operaciones "sicas de entrada4salida. 28. +l tipo $undamental de OpenCV( el &ue nos permite representar imgenes( es el tipo +at. /as imgenes pueden tener 7( 2( 8 < canales( y distintos tipos de pro$undidad. /as )aria"les para imgenes sern siempre de tipo2 +at. /a reser)a y li"eracin de las imgenes las reali*a OpenCV de $orma automtica. 2<. /os propiedades $undamentales del tipo +at son2 i().c$l. anc3o de la imagen ,en p#0eles1 i().'$/. alto de la imagen ,en p#0eles1 i().dep-*01 pro$undidad de los p#0eles ,34_56. 34_5&. 34_786. 34_78&. 34_92&. 34_92F y 34_8:F1. i().c*,nnel.01 nJmero de canales de la imagen ,normalmente 7 81 2;. +n el anterior cdigo( aEadir al $inal las siguientes l#neas2 ;De(ug#,0nchu'a)<d. al!u'a)<d,. img.cols. img.'ows$; ;De(ug#,='o>undidad)<d. canales)<d,. img.dep!h#$. img.channels#$$; 2=. +n memoria las imgenes siempre estn descomprimidas. +l puntero i().d,-, apunta a la matri* de p#0eles de la imagen ,los datos en crudo1. Normalmente no accederemos a los p#0eles directamente( sino &ue usaremos $unciones de la li"rer#a. 2?. +0isten di$erentes $ormas posi"les de crear una nue)a imagen2 2?.7. Creando una nue)a imagen vaca2 create. 2?.2. /eyendo una imagen desde un $ic3ero2 imread. 2?.8. Clonando una imagen e0istente2 c"one. < +at2 el tipo de datos para las imgenes. imread2 $uncin para leer una imagen ,de"emos seleccionar un $ic3ero e0istente1 named/indoB2 crear una )entana Procesamiento de Imgenes Guin de Prcticas Sesin 2. Instalacin y uso de OpenCV en Qt Creator 2B. 5dems( cuando una $uncin de OpenCV de)uel)e una imagen( la propia $uncin se encarga de crear la imagen con el tamaEo adecuado. CRE*R I+EGENES N<EV*S 2D. Para crear una ima0en 6acDa podemos 3acerlo de dos $ormas di$erentes2 2D.7. Crear la imagen en la dec"aracin de "a 6ariab"e1 +,- i(,)en0,l-u',2 ,nc*u',2 -ip$ 32 c$l$'415 2D.2. :edimensionar una imagen dec"arada pre6iamente1 +,- i(,)en5 i(,)en.c'e,-e0,l-u',2 ,nc*u',2 -ip$ 32 c$l$'415 2D.8. +l parmetro tipo indica la pro$undidad de los p#0eles y el nJmero de canales. Puede ser2 CVGB!C7( CVGB!C2( CVGB!C8( CVG7=SC7( CVG7=!C8( CVG82KC2( etc. Se puede usar la macro2 34_M0?@_AB=@#p'o>undidad. canales$ 2D.<. +l parmetro co"or indica el color inicial de la imagen. /os colores se representan mediante e" tipo de datos Sca"ar. Se pueden de$inir colores con las $unciones2 &cala'#aCul. ve'de. 'oDo$ o con 34_/E#'oDo. ve'de. aCul$. Si no se indica color( por de$ecto no se iniciali*an los p#0eles de la imagen. 86. +'emplo( aEadir un "otn ONue)aP al $ormulario y asociarle el siguiente cdigo2 Ma! img#7FG. 2GG. 34_5639$; namedWindow#,+ueva,$; imshow#,+ueva,. img$; 86.7. MQuL se )eN MPor &uLN +'ercicio2 iniciali*ar la imagen a color amarillo. 86.2. Pro"ar creando una imagen de 7 canal. MSe )e amarillaN LEER <N* I+*GEN DE DISCO 87. /a $uncin para leer una imagen desde un $ic3ero es imread% +,- i()= i('e,d0.-'in) n$(#'e2 in- enC$l$'=615 +l primer parmetro indica el nom"re del $ic3ero( y el segundo dice si se de"e leer en color ,)alor 71( en grises ,)alor 61 o tal y como estL en el $ic3ero ,)alor Q71. 82. /a $uncin imread admite los 5ormatos RMP( 9IR( SPG( SP+( SP+G( PNG( PRM( PGM( PPM( S:( :5S( IK y IKK. +n la )ersin 2.<.=.g 3e aEadido el $ormato GIK. 88. Pro"ar lo siguiente( copiando primero una imagen al directorio donde est el e'ecuta"le2 Ma! img) im'ead#,imagen.Dpg,$; // Poner aqu el nombre de la imagen namedWindow#,-magen,. G$; imshow#,-magen,. img$; 88.7. MQuL ocurreN MPor &uL $allaN ; Procesamiento de Imgenes Guin de Prcticas Sesin 2. Instalacin y uso de OpenCV en Qt Creator 88.2. +'ercicio2 3acer &ue el cdigo sea ro"usto $rente a errores. Su0erencia1 la $uncin imread de)uel)e una imagen )ac#a si no puede leer ,img.emp!H#$ )) !'ue1. 88.8. Ver en Pro:ects 4 Run 4 /or,in0 director( cul es el directorio de tra"a'o del e'ecuta"le. 53# es donde se de"e colocar la imagen. CLON*R <N* I+*GEN EFIS)EN)E 8<. +l mLtodo c"one permite clonar una imagen e0istente. +,- c$pi,= i(,)en.cl$ne015 8;. /a imagen clonada tiene el mismo tamaEo( tipo y contenido &ue la original. +s una imagen nue)a( &ue tiene su propia memoria. 8=. Si copiamos una imagen en otra ,sin usar clone1( am"as comparten la misma memoria. Solo e0iste una imagen re$erenciada dos )eces2 +,- ,li,.= i(,)en5 8?. Pro"ar la di$erencia entre estas am"as cosas ,o"ser)ar &ue se puede omitir la llamada a named/indoB( en ese caso la )entana se crea sola12 Ma! img) im'ead#,imagen.Dpg,$; imshow#,-magen an!es,. img$; Ma! copia) img.clone#$; Ma! alias) img; img) 34_/E#2FF.G.G$; // &e pone a 'oDo !oda la imagen imshow#,-magen despues,. img$; imshow#,3opia,. copia$; imshow#,0lias,. alias$; 8B. am"iLn se puede crear una imagen como un 5ra0mento de otra imagen. /a imagen de destino es una re$erencia a un tro*o de la imagen original ,no e0iste por s# sola1. +ste tro*o se de$ine como un rectngulo2 7ec-082 92 ,nc*$2 ,l-$1. +,- :',)(en-$= i()07ec-082 92 ,nc*$2 ,l-$115 8D. Pro"ar lo siguiente2 Ma! img) im'ead#,(.Dpg,$; Ma! >'agmen!o) img#/ec!#G. 2GG. 9GG. 2GG$$; imshow#,A'oCo,. >'agmen!o$; >'agmen!o) 34_/E#2FF.G.G$; imshow#,-magen,. img$; <6. 9e esta manera podemos de$inir y tra"a'ar con re0iones de interGs (ROI!. EN)R*D*HS*LID* #ESIC* <7. Como 3emos )isto( >ig3G!I incluye un mecanismo muy sencillo para crear 6entanas en las &ue mostrar imgenes de tipo Ip"Ima0e. /as )entanas de >ig3G!I se re$erencian por un nom"re( &ue es una cadena de tipo strin0. <2. Para crear una nue6a 6entana se usa2 = Procesamiento de Imgenes Guin de Prcticas Sesin 2. Instalacin y uso de OpenCV en Qt Creator %$id n,(ed;ind$/0.-'in) n$(#'e2 in- :l,). = ;INDO;&AUTO!I<E15 <2.7. Si ya e0iste una )entana con ese nom"re( no 3ace nada. <2.2. +l parmetro 5"a0s indica el tipo de )entana2 CVG-IN9O-GNO:M5/ o CVG-IN9O-G5!OSIC+ ,si se puede redimensionar el tamaEo de la )entana o no1( CVG-IN9O-GK:++:5IO o CVG-IN9O-GT++P:5IO ,relacin de aspecto )aria"le o $i'a1( CVGG!IGNO:M5/ o CVGG!IG+UP5N9+9 ,)entana normal sin nada o con "otones adicionales1. <2.8. +n los e'emplos de los anteriores puntos( )er la di$erencia entre poner n,(ed;ind$/0"I(,)en"2 CV&;INDO;&NO7+AL \ CV&=UI&NO7+AL \ CV&;INDO;&AUTO!I<E \ e-c. 15 <8. !na )e* creada una )entana( se muestran "as im0enes en ella con2 %$id i(.*$/0.-'in) n$(#'e2 +,- ()1 +l primer parmetro es el nom"re de la )entana. Si no se e0iste( no 3ace nada. +l segundo parmetro es la imagen a mostrar. <<. /a )entana se puede cam"iar de tamaEo con resi7e/indoB y de posicin con mo6e/indoB. Ver la ayuda. Pro"ar( por e'emplo( el siguiente cdigo2 namedWindow#,-magen,. G$; Ma! img#2:G. 92G. 34_5639$; >o' #in! i) G; i<2F8; iII$ % img) 34_/E##iJK$L98.#iJ25$LM.iJ22:$; imshow #,-magen,. img$; moveWindow#,-magen,. i. 7GG$; wai!?eH#7G$; 2 <;. Prueba1 en el e'emplo anterior( pro"ar a cerrar la )entana en su camino. MQuL ocurreN MPor &uLN <=. /as )entanas se pueden e"iminar con destro/indoB(strin0 nombre!. Pero tam"iLn se puede de'ar &ue las cierre el usuario del programa. <?. +l tipo de las )entanas puede cam"iarse una )e* creadas con la $uncin set/indoBPropert. Por e'emplo( podemos mostrar imgenes a pantalla completa. Pro"ar lo siguiente ,se cierra la )entana al pulsar alguna tecla12 Ma! img) im'ead#,imagen.Dpg,$; namedWindow#,-magen,. 34_W-+D*W_+*/M01$; >>P'$#,': CV&;INDO;&?7EE7ATIO imshow#,-magen,. img$; se!Window='ope'!H#,-magen,. 34_W+D_=/*=_F611&3/@@+. 7$; wai!?eH#G$; se!Window='ope'!H#,-magen,. 34_W+D_=/*=_F611&3/@@+. G$; <B. Leer una pu"sacin de teclado2 in- /,i-@e90in- -i(e15 ? Procesamiento de Imgenes Guin de Prcticas Sesin 2. Instalacin y uso de OpenCV en Qt Creator /ee una tecla. time indica cunto tiempo esperar ,en milisegundos1. Si no se pulsa en ese inter)alo( de)uel)e Q7. Si timeVV6( espera inde$inidamente. O:o1 para &ue esta operacin $uncione( de"e 3a"er alguna )entana de >ig3G!I a"ierta. <D. /as imgenes se 0uardan en disco con imBrite(nombre@ im0!. 9isponemos de una gran )ariedad de $ormatos ,RMP( SPG( IK( GIK( PNG( etc.1. +l primer parmetro es el nom"re y el segundo un +,-. /a $uncin de)uel)e un )alor "ooleano( &ue es true si se 3a podido escri"ir correctamente la imagen. +'emplo2 Ma! img) im'ead#,a.Dpg,. G$; imw'i!e#,salida.Dpg,. img$; ;6. +n el caso de los arc3i)os SPG( se puede indicar la ca"idad de compresin IPG llamando a la $uncin imBrite con un tercer parmetro adicional. Ma! img) im'ead#,a.Dpg,. 7$; vec!o'<in!> pa'ams; pa'ams.push_(ac"#34_-MW/-A@_N=@E_Q601-AB$; pa'ams.push_(ac"#2$; imw'i!e#,salida.Dpg,. img. pa'ams$; ;7. +'emplo de BaitJe. !n pe&ueEo 'uego estilo snakes. >ay &ue pulsar la tecla Escape para salir. namedWindow#,-magen,. 34_W-+D*W_F/@@/0A-*$; Ma! img#:5G. 8:G. 34_5639$; imshow#,-magen,. img$; se!Window='ope'!H#,-magen,. 34_W+D_=/*=_F611&3/@@+. 7$; in! !ecla) G. O) 92G. H)2:G; while #!eclaP)2K$ % !ecla) wai!?eH#7$; swi!ch #!olowe'#!ecla$$ % case Q;Q: OR)7G; ('ea"; case QwQ: OI)7G; ('ea"; case QpQ: HR)7G; ('ea"; case QlQ: HI)7G; ('ea"; 2 (lu'#img. img. &iCe#9.9$$; imgR) &cala'::all#7$; ci'cle#img. =oin!#O.H$.2G.34_/E#2FF.2FF.2FF$.R7$; imshow#,-magen,. img$; 2 des!'oHWindow#,-magen,$; ;2. +l 6a"or de un co"or es de tipo Sca"ar. !n Scalar es "sicamente un array de < )alores de tipo doub"e. Se puede acceder a sus )alores usando los corc3etes WX2 !c,l,' c$l$'= CV&7=0'$A$2 %e'de2 ,Bul15 c$l$'3C4 "D ABul c$l$'364 "D Ve'de c$l$'324 "D 7$A$ ;8. /a operacin para "eer escribir e" 6a"or de un pDKe" es el mGtodo at. +sta operacin est parametri*ada con el tipo de datos de la imagen. Si la imagen es B!C7( el tipo de)uelto es un uc3ar@ si es B!C8 es tipo es Vec8"@ si esY Im0 Va"or Im0 Va"or Im0 Va"or Im0 Va"or Im0 Va"or Im0 Va"or B!C7 uc3ar 7=SC7 s3ort 7=!C7 us3ort 82SC7 int 82KC7 $loat =<KC7 dou"le B Procesamiento de Imgenes Guin de Prcticas Sesin 2. Instalacin y uso de OpenCV en Qt Creator B!C2 Vec2" 7=SC2 Vec2s 7=!C2 Vec2. 82SC2 Vec2i 82KC2 Vec2$ =<KC2 Vec2d B!C8 Vec8" 7=SC8 Vec8s 7=!C8 Vec8. 82SC8 Vec8i 82KC8 Vec8$ =<KC8 Vec8d B!C< Vec<" 7=SC< Vec<s 7=!C< Vec<. 82SC< Vec<i 82KC< Vec<$ =<KC< Vec<d ;<. Normalmente tra"a'aremos con imgenes de tipo B!C8( por lo &ue podemos acceder a los p#0eles ,leer y escri"ir1 con cosas de la $orma2 Ma! img; ... 4ec9( piOel; piOel) img.a!<4ec9(>#H.O$; >> Lee' un pE8el >> pi8el3C4 "D ABul pi8el364 "D Ve'de pi8el324 "D 7$A$ img.a!<4ec9(>#H.O$) piOel; >> E.c'i#i' un pE8el ;;. Se puede con)ertir de Sca"ar a Vec;b 3aciendo casting2 4ec9( p) #4ec9($ scala'; +n sentido contrario ,de Vec8" a Scalar1 no se puede 3acer el casting. ;=. +'emplo de im0%at2 Ma! img#2F8. 2F8. 34_5639$; >o' #in! H) G;H<2F8;HII$ >o' #in! O) G; O<2F8; OII$ img.a!<4ec9(>#H. O$) 4ec9(#H.O.G$; imshow#,/esul!ado,. img$; RES<+EN +at ima0en(a"to@ anc9o@ tipo L@ co"orM !2 crear una imagen ima0enN imread(nombre L@ 5"a0M !2 leer una imagen de disco nue6aN ima0en%c"one(!2 clonar una imagen e0istente ima0enN CV?RG#(ro:o@ 6erde@ a7u"!2 iniciali*ar una imagen con un color boo" correctoN imBrite(nombre@ im0 L@ paramM !2 guardar una imagen a disco
named/indoB(nombre@ 5"a0!2 crear una )entana
ims9oB(nombre@ im0!2 mostrar una imagen en una )entana destro/indoB(nombre!2 eliminar una )entana int BaitJe(time!2 leer una tecla desde teclado Vec;b piKe"N im0%atOVec;bP(@ K!2 o"tener el )alor de un p#0el im0%atOVec;bP(@ K!N piKe"2 escri"ir el )alor de un p#0el CV?RG#(r@ 0@ b!@ Vec;b(b@ 0@ r!2 de$inir una )aria"le de tipo Scalar o Vec8" circ"e2 pintar un c#rculo. b"ur2 sua)i*ar una imagen D