Para leer un archivo de imagen de videos o cámaras que tienen una amplia gama de tipos, OpenCV proporciona una buena cantidad de utilidades. OpenCV tiene un conjunto de herramientas de este tipo conocido como HighGUI , que es parte de una de sus utilidades. Algunas de estas utilidades se utilizan en este artículo para mostrar y abrir una imagen en nuestro sistema.
Comprendamos la ejecución línea por línea del
código del programa:
IplImage* img_file = cvLoadImage("..input\\abcd.PNG");
Esta línea en particular cargará la imagen con una rutina de alto nivel: cvLoadImage() . Según el nombre del archivo, determina el formato de archivo que se va a cargar y luego asigna automáticamente la memoria necesaria para la estructura de datos de la imagen. Uno puede leer una amplia gama de diferentes formatos de imagen desde cvLoadImage() . Estos formatos de imagen pueden ser: JPEG, BMP, PNG, JPE, DIB, PBM, PPM, RAS, SR y TIFF . Luego, se devuelve un puntero a la estructura de datos de imagen asignada. El puntero devuelto se utiliza para manipular la imagen y sus datos. Esta estructura es IplImage. IplImage es la construcción de OpenCV que OpenCV utiliza para manejar todos los diferentes tipos de imágenes. Estas imágenes pueden ser una imagen de un solo canal, imágenes de varios canales, imágenes con valores de punto flotante o imágenes con valores enteros.
Aquí, en el código anterior, se proporciona la ruta a la imagen y es diferente para cada usuario. Por lo tanto, se puede configurar según la ubicación de la imagen en el sistema del usuario.
Código:
if (!img_file->imageData)
Usando esta línea de código, se puede verificar si la imagen realmente existe o no. Si no hay imageData, entonces, en ese caso, podemos detectarlo fácilmente usando this.
Código:
cvNamedWindow( “Display”, CV_WINDOW_AUTOSIZE );
Ahora, cvNamedWindow() es otra función de alto nivel proporcionada por la biblioteca HighGUI, es responsable de abrir una ventana en la pantalla. Es esta ventana la que tiene la visualización de la imagen. Con esto, también se puede asignar un nombre a la ventana de la imagen («Mostrar» en el código anterior). Este nombre se usa más en el código para realizar cualquier llamada HighGUI.
El segundo parámetro de cvNamedWindow() define las propiedades de la ventana y se puede establecer en 0 (el valor predeterminado) o en CV_WINDOW_AUTOSIZE (como en el código anterior). En el caso del valor ‘0’, el tamaño de la ventana será el mismo independientemente del tamaño de la imagen y la imagen se escalará de acuerdo con el tamaño de ventana predeterminado. En el caso de ‘CV_WINDOW_AUTOSIZE’, el tamaño de la ventana puede variar según el tamaño de la imagen. La ventana se escalará de acuerdo con el tamaño de imagen predeterminado y la imagen tendrá su tamaño real.
Código:
cvShowImage("Display", img_file);
cvShowImage() se usa para mostrar una imagen en el formulario como un puntero IplImage* , en una ventana existente. Eso significa que necesita una ventana ya existente, que se crea usando cvNamedWindow(). La imagen se vuelve a dibujar con la imagen presente en ella y la ventana cambia de tamaño en consecuencia (si se creó con CV_WINDOW_AUTOSIZE ), cuando llamamos a cvShowImage().
Código:
cvWaitKey(0);
cvWaitKey() se define para pedirle al programa que espere o se detenga para presionar una tecla. Si se le da un argumento positivo, entonces el programa esperará ese número de milisegundos. Luego, incluso si no se presiona ninguna tecla, continuará automáticamente. De lo contrario, como en el código anterior, usar un número negativo o ‘0’ significa que el programa esperará indefinidamente a que se presione la tecla.
Código:
cvReleaseImage( &img_file );
Ahora, podemos liberar la memoria asignada a la imagen, una vez que hayamos terminado. Se espera un puntero al puntero IplImage* para esta operación. El puntero ‘img_file’ se establecerá en NULL.
Código:
cvDestroyWindow("Display");
Finalmente, la ventana también se destruye usando cvDestroyWindow() . Cerrará y desasignará la memoria de la ventana o cualquier uso de datos asociado que pueda ser (búfer de imagen, copia de información de píxeles de *img_file ). Para un programa simple, no es necesario usar la función cvDestroyWindow() o cvReleaseImage() ya que todos los recursos se cierran automáticamente por el sistema operativo, pero es bueno hacerlo por su cuenta.
Código: muestra una imagen usando OpenCV.
#include <opencv2\opencv.hpp> #include <opencv2\highgui\highgui.hpp> #include <highlevelmonitorconfigurationapi.h> using namespace cv; using namespace std; int main(int argc, char** argv) { IplImage* img_file = cvLoadImage("..input\\abcd.jpg"); if (!img_file->imageData) { cout << "Sorry"; return -1; } cvNamedWindow("Display", CV_WINDOW_AUTOSIZE); cvShowImage("Display", img_file); cvWaitKey(0); cvReleaseImage(&img_file); cvDestroyWindow("Display"); }
Producción :
Este programa compila, ejecuta y luego carga una imagen en la ventana utilizando la memoria y la muestra en la ventana de la pantalla. Luego formará la pulsación de tecla del usuario y luego se cierra y sale.
Publicación traducida automáticamente
Artículo escrito por mathemagic y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA