Trabalho com imagens: redimensionamento (resize) e corte (crop) em C++ com OpenCV

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: redimensionamento (resize) e corte (crop) em C++

Na computação gráfica moderna e na visão computacional, as operações de redimensionamento (resize) e corte (crop) de imagens são fundamentais. Independentemente de você estar desenvolvendo um aplicativo de processamento de fotos, um sistema de reconhecimento facial ou simplesmente preparando imagens para uma rede neural — essas funções são indispensáveis. Neste artigo, veremos detalhadamente como realizar resize e crop na linguagem C++ usando a poderosa biblioteca OpenCV.



Por que OpenCV?

OpenCV (Open Source Computer Vision Library) é o padrão de facto para tarefas de visão computacional. Ela é escrita em C/C++ e fornece centenas de algoritmos otimizados. Para trabalhar com resize e crop, precisaremos de apenas algumas funções, mas sua performance e flexibilidade tornam o OpenCV a escolha ideal.

Você pode instalar o OpenCV através de um gerenciador de pacotes (por exemplo, vcpkg install opencv ou brew install opencv), ou compilando a partir do código-fonte. Os detalhes da instalação estão fora do escopo deste artigo, mas presume-se que você já tenha um projeto configurado com a biblioteca vinculada.



Preparação: carregando a imagem

Antes de alterar qualquer coisa, a imagem precisa ser carregada. No OpenCV, isso é feito com a função imread():

#include <opencv2/opencv.hpp>#include <iostream>

using namespace cv;using namespace std;

int main() { // Carregamos a imagem Mat image = imread("input.jpg"); if (image.empty()) { cerr << "Erro ao carregar a imagem!" << endl; return -1; } cout << "Tamanho da imagem original: " << image.cols << " x " << image.rows << endl; return 0;}

A função retorna um objeto do tipo Mat (matriz). Se o arquivo não for encontrado ou estiver corrompido, image.empty() retornará true.



Redimensionamento de imagem (resize) em C++

A função resize() no OpenCV permite redimensionar a imagem para tamanhos arbitrários. Ela suporta vários métodos de interpolação, que afetam a qualidade do resultado.



Sintaxe do resize

void resize(InputArray src, OutputArray dst, Size dsize,             double fx = 0, double fy = 0, int interpolation = INTER_LINEAR);
  • src — imagem de origem.
  • dst — imagem resultante.
  • dsize — novo tamanho (largura, altura). Pode ser definido explicitamente ou calculado através de fx e fy.
  • fx — fator de escala para a largura (se dsize = Size()).
  • fy — fator de escala para a altura.
  • interpolation — método de interpolação. Principais opções:
    • INTER_NEAREST — vizinho mais próximo (rápido, mas com artefatos).
    • INTER_LINEAR — bilinear (padrão, bom equilíbrio).
    • INTER_CUBIC — bicúbica (mais lenta, mas com mais qualidade).
    • INTER_AREA — usado ao reduzir a imagem (área de pixel).


Exemplo 1: Redução para um tamanho fixo

Mat resized;Size newSize(300, 200); // Largura 300, altura 200resize(image, resized, newSize, 0, 0, INTER_AREA);imwrite("resized_fixed.jpg", resized);cout << "Tamanho após resize: " << resized.cols << " x " << resized.rows << endl;


Exemplo 2: Redimensionamento para metade do tamanho mantendo a proporção

Mat scaled;resize(image, scaled, Size(), 0.5, 0.5, INTER_LINEAR);imwrite("scaled_half.jpg", scaled);

Se você especificar dsize = Size(), os novos tamanhos são calculados pelas fórmulas: dsiz

Recommendations