fbpixel
Etiquetas: ,

Vamos a programar usando OpenCV y C++ bajo VS Code. Configurar VS Code y las librerías para ciertos lenguajes puede ser complicado. En este tutorial veremos cómo configurar un ordenador y VS Code para poder desarrollar con OpenCV y C++.

Requisitos previos

Instalación de VS Code y configuración de las extensiones Code Runner y C\

Instalación del compilador precompilado GCC y OpenCV

Para que la cadena de compilación funcione, debe elegir la versión del compilador (gcc u otro) que corresponda a la versión precompilada de OpenCV

Versión de OpenCV precompilada para Mingw64: OpenCV-4.5.5-x64

Instalar la versión correspondiente de GCC con MSYS2

Versión de GCC para Mingw64: mingw-w64-x86_64-gcc‘>mingw-w64-x86_64-gcc (para instalar con el terminal MSYS MINGW64)

Abra el terminal MSYS MINGW64 e introduzca el comando

pacman -S mingw-w64-x86_64-gcc
msys2-mingw64-pacman-gcc Programación con OpenCV y VS Code en C++

N.B.: puede resultar difícil mantener distintas versiones de compiladores o software precompilado. No dudes en eliminar todo lo que no consideres necesario de lo que estés instalando.

Ahora tenemos el compilador y OpenCV en la versión Mingw64.

Configuración de variables de entorno

Para que el ordenador sepa dónde se encuentran los distintos códigos fuente, ejecutables y bibliotecas, hay que añadir las rutas a la variable de entorno Path del sistema.

Para el compilador, añada la ruta al ejecutable g++.exe ( ex: C:\msys64\mingw64\bin )

A continuación, añada la ruta a las bibliotecas precompiladas de OpenCV (por ejemplo, C:\opencv\x64\mingw\bin).

user-and-system-environment-variables Programación con OpenCV y VS Code en C++

A continuación, puede reiniciar el ordenador para tener en cuenta el cambio en las variables de entorno.

Compilar y probar el proyecto OpenCV

En este punto, puedes compilar y ejecutar código C++ que utilice OpenCV desde el terminal VS Code (o desde cualquier terminal).

Tomemos el código básico para leer la cámara y guardémoslo en el archivo test_opencv.cpp

#include<opencv2/opencv.hpp> //OpenCV header to use VideoCapture class//
#include<iostream>


using namespace std;
using namespace cv;


int main() {
   Mat myImage;//Declaring a matrix to load the frames//
   namedWindow("CAM Player");//Declaring the video to show the video//
   VideoCapture cap(0);//Declaring an object to capture stream of frames from default camera//
   if (!cap.isOpened()){ //This section prompt an error message if no video stream is found//
      cout << "No video stream detected" << endl;
      system("pause");
      return-1;
   }
   while (true){ //Taking an everlasting loop to show the video//
      cap >> myImage;
      if (myImage.empty()){ //Breaking the loop if no video frame is detected//
         break;
      }
      imshow("CAM Player", myImage);//Showing the video//
      char c = (char)waitKey(25);//Allowing 25 milliseconds frame processing time and initiating break condition//
      if (c == 27 || c == 'q'){ //If 'Esc' or 'q' is entered break the loop//
         break;
      }
   }

   cap.release();//Releasing the buffer memory//
   
   return 0;
}

Para compilar y ejecutar el código puede utilizar el siguiente comando

g++ test_opencv.cpp -o test_opencv -IC:\opencv\include -LC:\opencv\x64\mingw\bin -llibopencv_calib3d455 -llibopencv_core455 -llibopencv_dnn455 -llibopencv_features2d455 -llibopencv_flann455 -llibopencv_highgui455 -llibopencv_imgcodecs455 -llibopencv_imgproc455 -llibopencv_ml455 -llibopencv_objdetect455 -llibopencv_photo455 -llibopencv_stitching455 -llibopencv_video455 -llibopencv_videoio455 && ./test_opencv.exe

Puede ejecutar el código sin recompilarlo con el comando

./test_opencv.exe

A continuación, utilizamos VS Code para compilar y ejecutar el código.

Ejecutar código con Code Runner en VS Code

Para modificar los comandos de lanzamiento, ve a la configuración de la extensión Code Runner, busca «Code Runner: Executor Maps» y modifica la línea que te interese (aquí, cpp). Vamos a añadir todas las librerías que nos permiten compilar código C++ incluyendo OpenCV en VS Code.

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe build opencv",
            "command": "C:\\msys64\\mingw64\\bin\\g++.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${workspaceFolder}\\${fileBasenameNoExtension}.exe",
                "-I",
                "C:\\opencv\\include",
                "-L",
                "C:\\opencv\\x64\\mingw\\bin",
                "-l",
                "libopencv_calib3d455",
                "-l",
                "libopencv_core455",
                "-l",
                "libopencv_dnn455",
                "-l",
                "libopencv_features2d455",
                "-l",
                "libopencv_flann455",
                "-l",
                "libopencv_highgui455",
                "-l",
                "libopencv_imgcodecs455",
                "-l",
                "libopencv_imgproc455",
                "-l",
                "libopencv_ml455",
                "-l",
                "libopencv_objdetect455",
                "-l",
                "libopencv_photo455",
                "-l",
                "libopencv_stitching455",
                "-l",
                "libopencv_video455",
                "-l",
                "libopencv_videoio455"
            
                ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."
        },
    ],
    "version": "2.0.0"
}
vscode-code-runner-build-command Programación con OpenCV y VS Code en C++

Ahora puede ejecutar el programa con Code Runner en VS Code

Ejecutar código con Ejecutar y Depurar en VS Code

En VS Code, puede configurar el procedimiento de ejecución y depuración, que le permite ejecutar y depurar código utilizando F5.

Para ello, configuraremos una tarea de compilación en el archivo tasks.json. Esta tarea contiene la ruta al compilador C++ y a las librerías OpenCV.

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe build opencv",
            "command": "C:\\msys64\\mingw64\\bin\\g++.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${workspaceFolder}\\${fileBasenameNoExtension}.exe",
                "-I",
                "C:\\opencv\\include",
                "-L",
                "C:\\opencv\\x64\\mingw\\bin",
                "-l",
                "libopencv_calib3d455",
                "-l",
                "libopencv_core455",
                "-l",
                "libopencv_dnn455",
                "-l",
                "libopencv_features2d455",
                "-l",
                "libopencv_flann455",
                "-l",
                "libopencv_highgui455",
                "-l",
                "libopencv_imgcodecs455",
                "-l",
                "libopencv_imgproc455",
                "-l",
                "libopencv_ml455",
                "-l",
                "libopencv_objdetect455",
                "-l",
                "libopencv_photo455",
                "-l",
                "libopencv_stitching455",
                "-l",
                "libopencv_video455",
                "-l",
                "libopencv_videoio455"
            
                ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."
        },
    ],
    "version": "2.0.0"
}

Esta tarea puede realizarse mediante la combinación de teclas CTRL+MAYÚS+B

A continuación, le decimos a VS Code cómo lanzar el código en el archivo launch.json. Este archivo le dirá a VS Code que ejecute el comando ./${workspaceFolder}/${fileBasenameNoExtension}.exe i.e. test_opencv.exe

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(Windows) Launch",
            "type": "cppvsdbg",
            "request": "launch",
            "program": "${workspaceFolder}/${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "console": "externalTerminal",
            "preLaunchTask": "C/C++: g++.exe build opencv"
        }
    ]
}

Cuando modifique el archivo, deberá compilarlo de nuevo para aplicar las modificaciones. Esta tarea se tiene en cuenta en launch.json con la opción preLaunchTask, que llama a la etiqueta de la tarea de compilación «C\».

Ahora puedes lanzar un proyecto OpenCV en C++ usando el comando F5 o el menú ‘Run and Debug’ en VS Code.

vscode-run-opencv-cpp Programación con OpenCV y VS Code en C++

Paquetes MSYS2

En lugar de la versión compilada de OpenCV, puede instalar el paquete MSYS2 correspondiente

Elija paquetes de la misma versión en MSYS2 , MinGw64

pacman -S mingw-w64-x86_64-opencv

Por mi parte, he encontrado problemas de compatibilidad con Qt6. Si alguien ha conseguido que funcione, por favor, que me lo haga saber.

Fuentes