Trabalho com imagens em C++: bibliotecas CImg 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

Trabalho com imagens em C++: bibliotecas CImg e STB Image

O processamento de imagens é uma das tarefas principais na computação gráfica, visão computacional e tecnologias web. Em C++ não existem ferramentas nativas para trabalhar com imagens raster, mas existem muitas bibliotecas de terceiros. Neste artigo, veremos duas bibliotecas populares e fáceis de usar: CImg (para processamento de alto nível) e STB Image (para carregamento/salvamento rápido de formatos populares).



1. CImg: biblioteca universal para processamento de imagens

CImg (C++ Template Image Processing Library) é uma biblioteca header-only que oferece um amplo conjunto de funções para carregar, exibir, filtrar e analisar imagens. Ela suporta os formatos BMP, JPEG, PNG, TIFF e outros (com bibliotecas adicionais, como libpng, libjpeg).



Instalação e inclusão

Baixe a versão mais recente do site oficial. Em seguida, basta incluir o arquivo de cabeçalho:

#include "CImg.h"using namespace cimg_library;


Operações básicas com CImg

Vamos ver o carregamento, redimensionamento e aplicação do filtro Gaussiano:

#include "CImg.h"#include <iostream>

int main() { // Carregamento da imagem (suporta BMP, JPG, PNG e outros) CImg<unsigned char> img("input.jpg"); // Redimensionamento para 400x300 CImg<unsigned char> resized = img.resize(400, 300); // Aplicação de desfoque Gaussiano (raio 3) CImg<unsigned char> blurred = resized.get_blur(3.0f); // Salvamento do resultado blurred.save("output.jpg"); std::cout << "Imagem processada!" << std::endl; return 0;}


Recursos adicionais do CImg

  • Filtros: desfoque, nitidez, filtro mediano, operações morfológicas.
  • Transformações de cor: conversão para tons de cinza, HSV, Lab.
  • Histograma: construção e equalização.
  • Desenho: linhas, círculos, texto na imagem.
  • Exibição: janela integrada para visualização (requer X11 no Linux ou WinAPI no Windows).


2. STB Image: carregamento e salvamento rápidos

STB Image é um conjunto de bibliotecas de cabeçalho único de Sean Barrett, projetadas para leitura/escrita de imagens nos formatos PNG, JPG, BMP, GIF e outros. A principal vantagem é o minimalismo e a velocidade. Não requer instalação, basta incluir os arquivos stb_image.h e stb_image_write.h.



Inclusão

Baixe os arquivos do GitHub. Para usar, defina a macro STB_IMAGE_IMPLEMENTATION em exatamente um arquivo .cpp:

#define STB_IMAGE_IMPLEMENTATION#include "stb_image.h"

#define STB_IMAGE_WRITE_IMPLEMENTATION#include "stb_image_write.h"


Exemplo: carregar PNG e salvar em JPG

#include <iostream>

#define STB_IMAGE_IMPLEMENTATION#include "stb_image.h"#define STB_IMAGE_WRITE_IMPLEMENTATION#include "stb_image_write.h"

int main() { int width, height, channels; // Carregamento da imagem (retorna array de pixels no formato RGB/RGBA) unsigned char* img = stbi_load("input.png", &width, &height, &channels, 3); if (!img) { std::cerr << "Erro ao carregar a imagem!" << std::endl; return -1; } // Salvamento como JPEG com qualidade 90 stbi_write_jpg("output.jpg", width, height, 3, img, 90); // Liberação de memória stbi_image_free(img); std::cout << "Conversão concluída!" << std::endl; return 0;

Recommendations