Corte fotos como um profissional usando Python
Precisa cortar suas fotos para eliminar partes indesejadas ou para preparar dados para treinamento de algoritmos? Seja qual for sua necessidade, o Python é a solução.

Receba nossa newsletter

Corte suas fotos com Python

Com as bibliotecas poderosas do Python à nossa disposição, podemos realizar tarefas complexas de edição de imagens com facilidade. Uma dessas tarefas é cortar fotos ou imagens.

O Python oferece várias bibliotecas para lidar com operações de imagens de forma simples. Duas delas são a biblioteca Pillow (um fork do PIL) e OpenCV

Pillow é perfeita para manipulações básicas. Sua API simplifica as tarefas de processamento de imagens sem se aprofundar em estruturas de código complexas. No entanto, em casos de uso mais avançados, onde precisamos de interação em tempo real para cortar uma imagem com base nas entradas dos usuários, o OpenCV assume a liderança. Ele fornece recursos robustos necessários para lidarmos com essas tarefas.

Função de corte simples usando Pillow

Realizar cortes de imagens simples com Pillow é fácil, mas é não interativo! Vamos entender o que isso significa com um exemplo.

No exemplo abaixo, mostramos um exemplo de uma função simples de corte de imagens usando a biblioteca Pillow. Nossa função demonstra como é fácil cortar imagens com apenas algumas linhas de código, mas usando coordenadas definidas manualmente:

				
					from PIL import Image  # importa Image - se precisar instalar antes no seu ambiente: pip install pillow

def corta_foto_com_pillow(caminho_entrada, caminho_saida):  
     """ corta foto/imagem com Pillow """

    img = Image.open(caminho_entrada) # abre imagem/foto
    x_inicio, y_inicio = 400, 200 # # coordenadas iniciais do corte - modifique para o seu caso
    w, h = 400, 400  # largura e altura - modifique para o seu caso
    
    # Corta imagem usando as medidas definidas para criar uma caixa
    img_cortada = img.crop((x_inicio, y_inicio, x_inicio + w, y_inicio + h)) 
    img_cortada.save(caminho_saida) # salva imagem 

caminho_entrada = 'local_da_sua_foto/nome_da_foto' # local de sua foto/imagem original - diretorio/nome
caminho_saida = 'local_da_sua_foto_cortada/nome_da_foto_cortada' # local para salvamento de sua foto/imagem cortada - diretorio/nome

corta_foto_com_pillow(caminho_entrada, caminho_saida) # chama função
				
			

No código acima, definimos uma função simples para cortar imagens ou fotos com Pillow. Ela aceita dois argumentos, o local da foto original (caminho_entrada) e o local para salvar a foto cortada (caminho_saida). Note que selecionamos manualmente as coordenadas para cortar nosso arquivo de entrada, definindo uma posição inicial (x_inicio e y_inicio) e depois criando uma caixa usando essa posição em combinação com a altura e largura (h e w) da área de corte. Todas as dimensões são dadas em píxeis. A limitação desse método é acertar a posição e tamanho da caixa correta do corte. Veja nosso exemplo de imagem cortada abaixo.

Python corte de imagens

Função de corte simples usando OpenCV

Podemos escrever uma função bem similar à mostrada acima usando OpenCV:

				
					
import cv2 # Importa OpenCV - se precisar instalar antes no seu ambiente: pip install opencv-python

def corta_foto_com_opencv(caminho_entrada, caminho_saida):  
    """ corta foto com OpenCV """

    img = cv2.imread(caminho_entrada) # abre imagem/foto
    x_inicio, y_inicio, x_fim, y_fim = 400, 200, 850, 700  # Coordenadas da caixa de corte - ajuste conforme suas necessidades
    
    # Corta imagem usando fatiamento
    img_cortada = img[y_inicio:y_fim, x_inicio:x_fim]
    cv2.imwrite(caminho_saida, img_cortada) # salva imagem 

caminho_entrada = 'local_da_sua_foto/nome_da_foto' 
caminho_saida = 'local_para_salvar_sua_foto_cortada/nome_da_foto_cortada'

corta_foto_com_opencv(caminho_entrada, caminho_saida) # chama função
				
			

Nossa função recebe os mesmos argumentos da função definida anteriormente com Pillow. A única diferença significativa é que o OpenCV requer a definição de quatro pontos para criar a caixa de corte ao invés de usar largura e altura como o Pillow. No entanto, assim como ocorre com Pillow, achar as coordenadas exatas desses pontos pode ser demorado! Mas, como dissemos no início do post, uma grande vantagem do OpenCV é que, além de dar conta de procedimentos básicos, ele possui recursos avançados para manipular imagens. Para cortar imagens, um de seus recursos é a seleção interativa da área de corte!

Corte de imagem interativo usando OpenCV

Nem sempre queremos perder tempo achando as coordenadas para cortar uma imagem. Nessas situações, ferramentas que permitem a seleção interativa de coordenadas são muito melhores. Para fornecer uma experiência interativa, agora demonstraremos como podemos criar uma ferramenta de corte de imagem mais avançada com recurso de seleção em tempo real utilizando o poder do OpenCV e o método cv2.selectROI(). Este método permite que os usuários definam a área de corte desejada arrastando o mouse em uma janela interativa exibindo a imagem de entrada. Veja o código abaixo:

				
					def corta_foto_com_opencv_interativo(caminho_entrada, caminho_saida):  
    """ corta foto com OpenCV interativamente"""

    img = cv2.imread(caminho_entrada) # abre imagem/foto
    
    # Permite que usuário selecione a ROI (region of interest - região de interesse)
    roi = cv2.selectROI("Clique e arraste o mouse para criar a caixa de corte", img, False)
    
    # Extrai a região usando as cordenadas do usuário
    img_cortada = img[int(roi[1]):int(roi[1]+roi[3]), int(roi[0]):int(roi[0]+roi[2])]
    cv2.imwrite(caminho_saida, img_cortada) # salva imagem 

caminho_entrada = 'local_da_sua_foto/nome_da_foto' 
caminho_saida = 'local_da_sua_foto_cortada/nome_da_foto_cortada' 

corta_foto_com_opencv_interativo(caminho_entrada, caminho_saida) # chama função
				
			
Na função acima, usamos o método cv2.selectROI() para abrir a foto que desejamos cortar e permitir que o usuário defina a caixa (ROI – região de interesse) que deseja cortar arrastando o mouse. O método retorna os pontos iniciais do corte e a largura e altura da caixa. Com esses dados, criamos um fatiamento de listas para extrair a região que o usuário deseja. Abaixo, mostramos um exemplo de janela interativa com o ROI definido por um usuário para realizar o corte. À direita mostramos a imagem final cortada.
ROI OpenCV
OpenCV corte de fotos

Conclusões

Cortar imagens com Python é uma tarefa fácil e que pode ser realizada com o auxílio de várias bibliotecas. Neste post, mostramos como cortes simples podem ser feitos com Pillow e OpenCV. Para casos mais avançados, onde precisamos definir interativamente a área de corte, o OpenCV conta com métodos adequados sem exigir complexidade.

Imagem com IA Generativa – Dia 596

IA generativa - img596

Arte com IA generativa: imagem do dia

Todos os dias postamos um exemplo de imagem artística gerada com inteligência artificial.

Tutoriais

Postagens Mais Recentes

Outras Postagens Que Podem Interessar

Veja
Mais

Fique em contato

Se inscreva para receber nossa newsletter com novidades.

aprendiz artificial