Processamento de Imagens em C++: Bibliotecas CImg, OpenCV e stb_image

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 é uma das tarefas-chave na programação moderna, desde a visão computacional até editores gráficos. Em C++, existem várias bibliotecas poderosas que permitem carregar, processar e salvar imagens. Neste artigo, vamos explorar três ferramentas populares: CImg, OpenCV e stb_image. Cada uma delas possui suas próprias características, vantagens e áreas de aplicação.



1. Biblioteca CImg



CImg (C++ Image Processing Library) é uma biblioteca leve e multiplataforma para processamento de imagens. Ela é distribuída como um único arquivo de cabeçalho (CImg.h), o que a torna ideal para prototipagem rápida e projetos pequenos. O CImg suporta formatos BMP, JPEG, PNG, TIFF e outros, mas para trabalhar com eles requer a instalação de bibliotecas adicionais (por exemplo, libpng ou libjpeg).



Principais recursos:

  • Carregamento, exibição e salvamento de imagens.
  • Filtros (desfoque, nitidez, filtro mediano).
  • Transformações geométricas (rotação, redimensionamento, espelhamento).
  • Trabalho com espaços de cores (RGB, HSV, Lab).
  • Desenho de primitivas (linhas, círculos, texto).


Exemplo: carregar uma imagem e aplicar desfoque



#include "CImg.h"using namespace cimg_library;

int main() { // Carregamos a imagem CImg<unsigned char> image("input.jpg");

// Aplicamos desfoque Gaussiano (raio 3) CImg<unsigned char> blurred = image.get_blur(3);

// Salvamos o resultado blurred.save("output_blurred.jpg");

return 0;}


Este código demonstra a abordagem minimalista do CImg: uma linha para carregar, uma para processar e uma para salvar. A biblioteca gerencia a memória automaticamente.



2. Biblioteca OpenCV



OpenCV (Open Source Computer Vision Library) é o padrão de facto para tarefas de visão computacional e processamento de imagens em C++. Ela inclui mais de 2500 algoritmos otimizados, suporta aceleração por GPU e é amplamente utilizada em soluções industriais, robótica e pesquisa científica. O OpenCV trabalha com formatos JPEG, PNG, TIFF, WebP e muitos outros.



Principais recursos:

  • Carregamento, exibição e gravação de vídeo/imagens.
  • Filtragem, morfologia, processamento por limiar.
  • Detecção de objetos (rostos, carros) usando cascatas Haar ou aprendizado profundo.
  • Calibração de câmera, visão estéreo.
  • Aprendizado de máquina (SVM, KNN, redes neurais).


Exemplo: redimensionar e converter para tons de cinza



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

int main() { // Carregamos a imagem colorida Mat image = imread("input.jpg", IMREAD_COLOR); if (image.empty()) { return -1; }

// Convertemos para tons de cinza Mat gray; cvtColor(image, gray, COLOR_BGR2GRAY);

// Reduzimos o tamanho pela metade Mat resized; resize(gray, resized, Size(), 0.5, 0.5, INTER_LINEAR);

// Salvamos o resultado imwrite("output_gray_resized.jpg", resized);

return 0;}


O OpenCV usa a classe Mat para representar imagens. Todas as operações são realizadas através de funções estáticas ou métodos. A biblioteca requer instalação prévia, mas oferece máxima flexibilidade e desempenho.



3. Biblioteca stb_image



stb_image faz parte de um conjunto de bibliotecas de cabeçalho único de Sean Barrett. Ela é destinada exclusivamente ao carregamento e salvamento de imagens, sem funções de processamento. Suporta os formatos JPEG, PNG, BMP, GIF, PS

Recommendations