Como recortar uma imagem usando OpenCV em Python

Manav Narula 25 fevereiro 2025 Python Python OpenCV
  1. Método 1: Recortando Usando Slicing de Array NumPy
  2. Método 2: Recortando Usando ROI (Região de Interesse) do OpenCV
  3. Método 3: Recortando com Eventos do Mouse
  4. Conclusão
  5. Seção de FAQ
Como recortar uma imagem usando OpenCV em Python

O processamento de imagens é uma habilidade crucial para desenvolvedores, especialmente em áreas como visão computacional, aprendizado de máquina e mídia digital. Uma das tarefas mais comuns no processamento de imagens é recortar imagens. O recorte ajuda a focar em uma área específica de uma imagem, removendo partes desnecessárias e aprimorando a qualidade visual geral. Neste artigo, vamos explorar como recortar imagens usando OpenCV em Python. Cobriremos vários métodos, forneceremos exemplos de código claros e bem comentados e ofereceremos explicações detalhadas para ajudar você a entender cada abordagem. Seja você um iniciante ou um programador experiente, este guia o equipará com as habilidades necessárias para manipular imagens de maneira eficaz.

Método 1: Recortando Usando Slicing de Array NumPy

Uma das maneiras mais simples de recortar uma imagem no OpenCV é utilizando o slicing de arrays NumPy. OpenCV lê imagens como arrays NumPy, permitindo que você manipule os valores dos pixels diretamente. Este método é simples e eficiente para recortar áreas retangulares de uma imagem.

Processo Passo a Passo

  1. Importar Bibliotecas: Comece importando as bibliotecas necessárias, incluindo OpenCV e NumPy.
  2. Carregar a Imagem: Use cv2.imread() para carregar a imagem que você deseja recortar.
  3. Definir Coordenadas de Recorte: Especifique as coordenadas para os cantos superior esquerdo e inferior direito da área de recorte.
  4. Recortar a Imagem: Use slicing de array para extrair a região desejada.
  5. Exibir a Imagem Recortada: Utilize cv2.imshow() para visualizar o resultado recortado.

Exemplo de Código

import cv2
import numpy as np

# Load the image
image = cv2.imread('path/to/your/image.jpg')

# Define the coordinates for cropping (y_start:y_end, x_start:x_end)
cropped_image = image[50:200, 100:300]

# Display the cropped image
cv2.imshow('Cropped Image', cropped_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Neste método, carregamos a imagem usando a função imread() do OpenCV. A imagem é representada como um array NumPy, onde cada pixel pode ser acessado utilizando suas coordenadas. Ao especificar a faixa de linhas e colunas, podemos fatiar o array para obter a imagem recortada. A função imshow() exibe a imagem recortada em uma janela, permitindo que você veja o resultado imediatamente. Este método é eficiente e fornece controle preciso sobre o processo de recorte.

Método 2: Recortando Usando ROI (Região de Interesse) do OpenCV

Outro método eficaz para recortar imagens no OpenCV é usando a técnica de Região de Interesse (ROI). Este método é particularmente útil quando você deseja recortar uma área específica com base em entradas ou condições dinâmicas.

Processo Passo a Passo

  1. Importar Bibliotecas: Comece importando o OpenCV.
  2. Carregar a Imagem: Use cv2.imread() para carregar sua imagem.
  3. Definir a ROI: Especifique as coordenadas para a região que você deseja recortar.
  4. Recortar a Imagem: Use a ROI para extrair a área desejada.
  5. Exibir a Imagem Recortada: Use cv2.imshow() para visualizar o resultado.

Exemplo de Código

import cv2

# Load the image
image = cv2.imread('path/to/your/image.jpg')

# Define the Region of Interest (ROI)
x, y, w, h = 100, 50, 200, 150  # x, y, width, height
roi = image[y:y+h, x:x+w]

# Display the cropped image
cv2.imshow('Cropped ROI', roi)
cv2.waitKey(0)
cv2.destroyAllWindows()

Neste método, definimos uma Região de Interesse (ROI) especificando as coordenadas do canto superior esquerdo (x, y) juntamente com a largura (w) e a altura (h) da área desejada. A sintaxe image[y:y+h, x:x+w] permite fatiar o array da imagem adequadamente. Este método é particularmente útil para aplicações onde a área de recorte pode mudar com base na entrada do usuário ou na lógica do programa. Ao usar ROIs, você pode ajustar dinamicamente qual parte da imagem focar.

Método 3: Recortando com Eventos do Mouse

Para uma abordagem mais interativa, você pode recortar imagens utilizando eventos do mouse no OpenCV. Este método permite que os usuários selecionem a área de recorte visualmente, tornando-o ideal para aplicações onde a precisão é essencial.

Processo Passo a Passo

  1. Importar Bibliotecas: Importar OpenCV e NumPy.
  2. Carregar a Imagem: Use cv2.imread() para carregar a imagem.
  3. Definir o Callback do Mouse: Crie uma função para lidar com eventos do mouse e selecionar a área de recorte.
  4. Exibir a Imagem: Use cv2.imshow() para mostrar a imagem.
  5. Recortar a Área Selecionada: Extraia a área com base na seleção do usuário.

Exemplo de Código

import cv2

# Global variables to store the cropping coordinates
start_point = None
end_point = None

# Mouse callback function to capture the cropping area
def select_area(event, x, y, flags, param):
    global start_point, end_point
    if event == cv2.EVENT_LBUTTONDOWN:
        start_point = (x, y)
    elif event == cv2.EVENT_LBUTTONUP:
        end_point = (x, y)
        cv2.rectangle(image, start_point, end_point, (0, 255, 0), 2)
        cv2.imshow('Image', image)

# Load the image
image = cv2.imread('path/to/your/image.jpg')
cv2.namedWindow('Image')
cv2.setMouseCallback('Image', select_area)

# Display the image
cv2.imshow('Image', image)
cv2.waitKey(0)

# Crop the image based on selected points
if start_point and end_point:
    cropped_image = image[start_point[1]:end_point[1], start_point[0]:end_point[0]]
    cv2.imshow('Cropped Image', cropped_image)
    cv2.waitKey(0)

cv2.destroyAllWindows()

Neste método interativo, definimos uma função de callback do mouse que captura os pontos de início e fim do retângulo de recorte. O usuário pode clicar e arrastar para selecionar a área visualmente. Quando o botão do mouse é liberado, a área selecionada é destacada com um retângulo e a operação de recorte é executada com base nas coordenadas definidas. Este método aprimora a experiência do usuário e fornece uma maneira prática de recortar imagens com precisão.

Conclusão

Recortar imagens é uma tarefa fundamental no processamento de imagens, e o OpenCV em Python oferece vários métodos para alcançar isso. Desde o simples slicing de NumPy até eventos de mouse interativos, cada método tem suas vantagens e casos de uso. Compreender essas técnicas permitirá que você manipule imagens de forma eficaz, seja para projetos pessoais ou aplicações profissionais. Com o conhecimento adquirido neste guia, você pode recortar imagens com confiança e explorar mais funcionalidades no OpenCV.

Seção de FAQ

  1. O que é OpenCV?
    OpenCV (Open Source Computer Vision Library) é uma poderosa biblioteca usada para tarefas de visão computacional e processamento de imagens. Ela fornece várias funcionalidades para manipulação, análise de imagens e aprendizado de máquina.
  2. Como posso instalar o OpenCV em Python?
    Você pode instalar o OpenCV usando pip, executando o comando:
    pip install opencv-python
    
  3. Posso recortar imagens em formatos diferentes de JPEG?
    Sim, o OpenCV suporta vários formatos de imagem, incluindo PNG, BMP e TIFF. Você pode usar os mesmos métodos para recortar imagens independentemente do formato.
  4. Como posso salvar a imagem recortada?
    Você pode salvar a imagem recortada usando a função cv2.imwrite(). Por exemplo:
    cv2.imwrite('path/to/save/cropped_image.jpg', cropped_image)
    
  5. Existe uma maneira de redimensionar a imagem recortada?
    Sim, você pode redimensionar a imagem recortada usando a função cv2.resize(). Por exemplo:
    resized_image = cv2.resize(cropped_image, (width, height))
    
Está gostando dos nossos tutoriais? Inscreva-se no DelftStack no YouTube para nos apoiar na criação de mais vídeos tutoriais de alta qualidade. Inscrever-se
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

Artigo relacionado - Python OpenCV