Site icon AranaCorp

Programação com OpenCV e VS Code em C++

Vamos programar utilizando OpenCV e C++ no VS Code. A configuração do VS Code e das bibliotecas para determinadas linguagens pode ser complicada. Neste tutorial, veremos como configurar um computador e o VS Code para poder desenvolver com OpenCV e C++.

Pré-requisitos

Instalação do VS Code e configuração das extensões Code Runner e C\

Instalação do compilador GCC e OpenCV pré-compilados

Para que a cadeia de compilação funcione, é necessário escolher a versão do compilador (gcc ou outra) que corresponde à versão pré-compilada do OpenCV

Versão do OpenCV pré-compilada para Mingw64: OpenCV-4.5.5-x64

Instalar a versão correspondente do GCC com MSYS2

Versão do GCC para Mingw64: mingw-w64-x86_64-gcc‘>mingw-w64-x86_64-gcc (para ser instalado com o terminal MSYS MINGW64)

Abrir o terminal MSYS MINGW64 e introduzir o comando

pacman -S mingw-w64-x86_64-gcc

N.B.: pode ser difícil manter diferentes versões de compiladores ou software pré-compilado. Não hesite em remover qualquer coisa que não considere necessária do que está a instalar.

Agora temos o compilador e o OpenCV na versão Mingw64.

Configuração de variáveis de ambiente

Para garantir que o computador saiba onde estão localizados os vários códigos-fonte, executáveis e bibliotecas, os caminhos devem ser adicionados à variável de ambiente Path no sistema.

Para o compilador, adicione o caminho para o executável g++.exe ( ex: C:\msys64\mingw64\bin )

Em seguida, adicione o caminho para as bibliotecas pré-compiladas do OpenCV (por exemplo, C:\opencv\x64\mingw\bin).

Pode então reiniciar o computador para ter em conta a alteração das variáveis de ambiente.

Compilar e testar o projeto OpenCV

Nesta fase, pode compilar e executar código C++ que utiliza o OpenCV a partir do terminal VS Code (ou qualquer outro terminal).

Vamos pegar no código básico para ler a câmara e guardá-lo no ficheiro 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 e executar o código, pode utilizar o seguinte 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

É possível executar o código sem recompilar com o comando

./test_opencv.exe

Em seguida, usamos o VS Code para compilar e executar o código.

Executar código com o Code Runner no VS Code

Para modificar os comandos de lançamento, aceda à configuração da extensão Code Runner, procure “Code Runner: Executor Maps” e modifique a linha que lhe interessa (aqui, cpp). Vamos adicionar todas as bibliotecas que nos permitem compilar código C++, incluindo o OpenCV no VS Code.

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

Agora é possível executar o programa com o Code Runner no VS Code

Executar código com Executar e depurar no VS Code

Em VS Code, pode configurar o procedimento de execução e depuração, que lhe permite executar e depurar código utilizando a tecla F5.

Para fazer isso, configuraremos uma tarefa de compilação no arquivo tasks.json. Essa tarefa contém o caminho para o compilador C++ e as bibliotecas 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 tarefa pode ser executada utilizando o atalho de teclado CTRL+SHIFT+B

Em seguida, dizemos ao VS Code como iniciar o código no arquivo launch.json. Esse arquivo dirá ao VS Code para executar o 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"
        }
    ]
}

Quando se modifica o ficheiro, é necessário compilá-lo novamente para aplicar as modificações. Essa tarefa é levada em consideração no launch.json com a opção preLaunchTask, que chama o rótulo da tarefa de compilação “C\”.

Pode agora iniciar um projeto OpenCV em C++ utilizando o comando F5 ou o menu “Executar e depurar” no VS Code.

Pacotes MSYS2

Em vez da versão compilada do OpenCV, pode instalar o pacote MSYS2 correspondente

Escolha pacotes da mesma versão em MSYS2 , MinGw64

pacman -S mingw-w64-x86_64-opencv

Pela minha parte, deparei-me com problemas de compatibilidade com o Qt6. Se alguém tiver conseguido pô-lo a funcionar, informe-me.

Fontes

Exit mobile version