Redimensione e Corte Imagens com OpenCV
A manipulação de imagens em Python é uma habilidade útil e de simples implementação. Já abordamos esse tópico usando a excelente biblioteca Pillow. Neste post, exploraremos como redimensionar e cortar imagens com o OpenCV, a poderosa biblioteca de visão computacional. Assim, você aprende técnicas essenciais para aprimorar seus projetos de IA com códigos fáceis.
Redimensionamento de Fotos e Imagens com OpenCV
resize(src, dsize, fx, fy, interpolation)
Neste trecho, src representa a imagem de entrada necessária. O termo dsize é o tamanho desejado da imagem de saída, pode ser uma nova altura e largura. O parâmetro fx é o fator de escala ao longo do eixo horizontal. Já fy é o fator de escala ao longo do eixo vertical. O termo interpolation se refere ao método de interpolação. OpenCV possui vários métodos de interpolação para o redimensionamento de imagens.
Os parâmetros dsize, fx e fy não costumam ser usados todos juntos. Geralmente, usa-se dsize quando se deseja especificar diretamente o tamanho da nova imagem em píxeis. Já os parâmetros fx e fy são usados quando queremos fazer uma alteração em escala (por exemplo, reduzir ou aumentar uma imagem em 50%). Veja alguns exemplos a seguir. A imagem original que será transformada é mostrada abaixo.
import cv2
# redimensionamento de imagens em escala
img = cv2.imread('SUA IMAGEM AQUI') # insira a path para sua imagem, por exemplo: imagens/minha_img.png
escala_x = 1.2 # aumenta largura em 20%
escala_y = 1.2 # aumenta altura em 20%
img_aumentada = cv2.resize(img, None, fx= escala_x, fy= escala_y, interpolation= cv2.INTER_LINEAR) # redimensiona imagem
cv2.imwrite("nome_da_sua_nova_imagem.jpg", img_aumentada) # salva nova imagem, escolha formato desejado (ex: png, jpg, etc)
No exemplo acima, a imagem foi aumentada em 20% (imagem mostrada abaixo). Isso foi feito especificando escalas (fx e fy) para o redimensionamento.
Para especificar o redimensionamento usando valores de píxeis ao invés de uma escala, o código pode ser escrito assim:
# redimensionamento de imagens usando tamanhos em píxeis
nova_largura = 300
nova_altura = 700
novo_tamanho = (nova_largura, nova_altura)
resized_img = cv2.resize(img, novo_tamanho, interpolation= cv2.INTER_LINEAR)
cv2.imwrite("minha_nova_imagem.jpg", resized_img) # salva nova imagem
Embora o uso explicito de píxeis ofereça mais controle, ele pode distorcer a imagem, como ocorreu nesse exemplo:
Verifique o Tamanho das Imagens com OpenCV
Para evitar distorções durante o redimensionamento ou corte de imagens, você pode conferir antes o tamanho original de uma imagem com o comando shape:
img = cv2.imread('minha_imagem.jpg')
print(img.shape)
# (481, 320, 3) # resultado
O primeiro valor é a altura da imagem, o segundo é a sua largura e o terceiro é o número de canais de cores.
Corte Imagens com OpenCV
Para cortar imagens e fotos com OpenCV, a sintaxe geral é mostrada abaixo.
imagem_cortada = imagem_original[linha_inicial:linha_final, coluna_inicial:coluna_final]
Nela, precisamos usar uma notação equivalente a um fatiamento de listas. As linhas se referem à altura da imagem e as colunas se referem à sua largura. Veja um exemplo em código:
# corte imagens com OpenCV
img = cv2.imread('minha_imagem.jpg') # abre imagem
cropped_image = img[100:300,80:200] # corta imagem
cv2.imwrite("noma_imagem.jpg", cropped_image) # salva nova imagem
Nesse código, especificamos linhas e colunas para o início e término do corte da imagem e salvamos a nova imagem. Para quem prefere exibi-la ao invés de salvá-la, o comando é: cv2.imshow(nome_da_imagem).
Não é incomum ser necessário explorar diferentes valores de início e término das linhas e colunas para realizar o corte que desejamos, mas a técnica é simples e, em poucos minutos, sua foto estará pronta. Nossa imagem de exemplo segue abaixo. O corte de imagem é mostrado à direita.