Processamento de imagens em C++: bibliotecas CImg, OpenCV e Magick++

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com imagens em C++: visão geral das bibliotecas e exemplos práticos



O processamento de imagens digitais é uma das tarefas-chave da programação moderna. Em C++, existem várias bibliotecas poderosas que permitem carregar, modificar, analisar e salvar imagens. Neste artigo, veremos três das ferramentas mais populares: CImg (leve e simples), OpenCV (padrão industrial para visão computacional) e GraphicsMagick (para conversão de alto desempenho).



1. CImg — biblioteca leve para operações básicas



CImg (The C++ Template Image Processing Library) é uma biblioteca de cabeçalho que não requer instalação de DLLs adicionais. É ideal para projetos educacionais e prototipagem rápida. Suporta os formatos BMP, PNG, JPEG, TIFF (através de codecs externos).



Instalação

Basta baixar o arquivo CImg.h e incluí-lo no projeto. Para trabalhar com JPEG/PNG, também serão necessários libjpeg, libpng e zlib.



Exemplo: carregamento, inversão de cores e salvamento

#include "CImg.h"using namespace cimg_library;

int main() { // Carregamos a imagem CImg<unsigned char> img("input.jpg"); // Invertemos as cores (pixel = 255 - pixel) CImg<unsigned char> inverted = 255 - img; // Aplicamos desfoque Gaussiano (raio 3) CImg<unsigned char> blurred = img.get_blur(3); // Salvamos os resultados inverted.save("inverted.jpg"); blurred.save("blurred.jpg"); return 0;}


2. OpenCV — framework poderoso para visão computacional



OpenCV (Open Source Computer Vision Library) é o padrão de facto para tarefas de reconhecimento, deteção de objetos e processamento complexo de imagens. Suporta centenas de algoritmos, trabalho com vídeo e redes neurais. É multiplataforma.



Instalação

No Ubuntu: sudo apt install libopencv-dev. No Windows — via vcpkg ou instalador oficial.



Exemplo: deteção de bordas (Canny) e redimensionamento

#include <opencv2/opencv.hpp>using namespace cv;

int main() { // Leitura da imagem Mat img = imread("photo.jpg"); if (img.empty()) return -1; // Conversão para tons de cinza Mat gray; cvtColor(img, gray, COLOR_BGR2GRAY); // Deteção de bordas pelo algoritmo Canny Mat edges; Canny(gray, edges, 50, 150); // Redimensionamento para 300x300 Mat resized; resize(img, resized, Size(300, 300)); // Salvamento e exibição imwrite("edges.jpg", edges); imshow("Original", img); waitKey(0); return 0;}


3. GraphicsMagick — conversão rápida e processamento em lote



GraphicsMagick é um fork do ImageMagick, focado em estabilidade e desempenho. É usado para conversão em massa, redimensionamento, marcas d'água. Trabalha com mais de 200 formatos.



Instalação

Através do gerenciador de pacotes: sudo apt install graphicsmagick. Para C++, é necessária a biblioteca libgraphicsmagick++-dev.



Exemplo: redução de imagem e conversão para PNG

#include <Magick++.h>using namespace Magick;

int main() { InitializeMagick(nullptr); // Carregamento da imagem Image image("input.tiff"); // Redimensionamento para 800 pixels de largura image.scale(Geometry("800x")); // Rotação de 90 graus image.rotate(90); // Definição da qualidade JPEG (se o formato de saída for JPEG) image.quality(85); // Salvamento em PNG image.write("output.png"); return 0;}


Comparação das bibliotecas

  • CImg — início simples, mínimo

Recommendations