OpenCV en QT Creator y una camara IP

En este tutorial te indicaremos como mostrar una imagen con OpenCV en QT Creator y una cámara IP. OpenCV es un conjunto de bibliotecas y clases que permiten agregar a nuestros proyectos, la capacidad de tener visión artificial. Entonces para este proyecto se usará un celular y una app para que funcione como cámara IP. Para convertir una matriz de OpenCV a una imagen de QT (qImage), se usará una biblioteca externa. Esta biblioteca es un proyecto que pueden encontrar en el siguiente enlace:  https://github.com/JorgeAparicio/ImageQ/blob/master/mat2qimage.cpp .

En el enlace anterior se encuentra todos los archivos de la biblioteca. Para este proyecto en realidad sólo requerimos dos archivos, el mat2qimage.cpp y el mat2qimage.h. Se pueden descargar del siguiente enlace:  https://hetpro-store.com/TUTORIALES/EjemplosProgramas/mat2qimage.zip.

Requisitos o conocimientos previos para este tutorial:

OpenCV con QT Creator

Paso # 1 – Crear un Timer de 30ms

Como ya vimos en el tutorial anterior, crearemos un timer, pero que se desborde cada 30mS. El objetivo de este timer será el capturar una imagen de la cámara IP y mostrarla en una etiqueta de QT.

OpenCV en QT Creator y una camara IP

Paso # 2 – Agregar una etiqueta (label)

Para el paso numero dos, agregaremos una etiqueta en la interfaz gráfica. Por ejemplo, dicha etiqueta se modificará para que tenga un tamaño de 800×450 pixeles. Incluso se puede agregar un «frame» a la etiqueta. Entonces esta etiqueta se usará para mostrar la imagen que se capture de la cámara IP.

OpenCV en QT Creator y una camara IP

Paso # 3 – Configura el proyecto *.pro

En el paso # 3 se configurara el proyecto para agregarle la capacidad de compilar las bibliotecas de OpenCV. Para esto se agregaran las siguientes lineas en el archivo.pro.

DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0

INCLUDEPATH += /usr/local/include/opencv2
LIBS += -L/usr/local/lib -lopencv_core -lopencv_imgcodecs -lopencv_highgui -lopencv_videoio
CONFIG += link_pkgconfig
PKGCONFIG += opencv

Paso # 4 – Agregar la biblioteca mat2qimage.cpp y mat2qimage.h

Para el paso # 5, se agregaran las bibliotecas de mat2qimage al proyecto. Para este paso, se selecciona la carpeta de «sources» y con el clic derecho se selecciona la opción, «Add existing files» – Agregar archivos existentes. Entonces buscaremos los archivos en la carpeta del proyecto y seleccionaremos la opción agregar o ADD. Finalmente los archivos, incluyendo el .h se agregará al proyecto.

Nota. Previamente se tienen que copiar los archivos mat2qimage.cpp y mat2qimage.h a la carpeta del código fuente del proyecto.

OpenCV con QT Y MAT2QIMAGE

Paso # 5 – Agregar las bibliotecas en mainWindow.cpp

En el paso # 4 se agregaran las siguientes bibliotecas al proyecto, es decir en el programa mainWindow.cpp

  1. #include<opencv2/core/core.hpp>
  2. #include<opencv2/ml/ml.hpp>
  3. #include<opencv/cv.h>
  4. #include<opencv2/imgproc/imgproc.hpp>
  5. #include<opencv2/highgui/highgui.hpp>
  6. #include<opencv2/video/background_segm.hpp>
  7. #include<opencv2/videoio.hpp>
  8. #include<opencv2/imgcodecs.hpp>
  9. #include «mat2qimage.h»

Paso # 6 – Agregar variables globales

Para el paso numero 6 se agregaran las siguientes variables globales:

  1. using namespace cv;   //En realidad no es una variable, esta instrucción permite reconocer las funciones de OpenCV en QT.
  2. VideoCapture camara1(«http://192.168.100.2:8080/video»);
  3. //VideoCapture camara1(0); //Abre la cámara de la laptop o una cámara WEb conectada a la computadora

Nota. La dirección IP dependerá de la red, puede variar. Esta IP aparecerá una vez iniciado el servidor de la app. Es importante indicar que tanto la computadora como el celular deberán formar parte de la misma red. 

Paso # 7 – Abrir la cámara IP

Para abrir la cámara IP se agregarán las siguientes líneas de código después de la sentencia setupUI().

if(!camara1.isOpened()) {
camara1.open(«http://192.168.100.2:8080/video»);

}

Paso # 8 – Capturar la imagen de la cámara IP, cambiar de tamaño y mostrarla en la etiqueta

Para el paso # 8, constara de 3 sub-pasos.

  1. Verificar si la cámara esta abierta.
  2. Capturar la imagen y guardarla en una variable del tipo Mat.
  3. Cambiar el tamaño de la imagen anterior (Mat IMAGEN) y guardarla en la variable Mat ImagenPequena.
  4. Mostrar la imagen pequeña en la etiqueta.

void MainWindow::funcionActivacionTimer(){
//Aqui se captura la imagen de camara IP cada 30ms
if(camara1.isOpened()){ //Paso # 1
Mat IMAGEN;
Mat IMAGENpequena;
camara1 >> IMAGEN; //Paso # 2
cv::resize(IMAGEN,IMAGENpequena,Size(800,450)); //Paso # 3

//Las siguientes 4 instrucciones representan al Paso # 4
QImage qImage = Mat2QImage(IMAGENpequena);
QPixmap pixmap = QPixmap::fromImage(qImage);
ui->label->clear();
ui->label->setPixmap(pixmap);

}
}

 

Descargar el proyecto completo

https://hetpro-store.com/TUTORIALES/EjemplosProgramas/QT-Opencv-1-Intro.zip

 

Autor: Dr. Rubén Estrada Marmolejo

Escríbenos tus dudas o comentarios

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Usamos Cookies en nuestro sitio WEB

Por favor confirma, si aceptas nuestras cookies de rastreo. También puedes negar el uso de cookies de rastreo y seguir navegando sin que ninguna información sea enviada a servicios de terceros.