Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Detecção de Cantos e Blobs | Processamento de Imagens com OpenCV
Fundamentos de Visão Computacional

bookDetecção de Cantos e Blobs

Detecção de Cantos

A detecção de cantos é utilizada para identificar mudanças bruscas de intensidade onde dois contornos se encontram. É útil em correspondência de características, rastreamento de objetos e reconhecimento de estruturas.

Métodos Populares:

  • Detector de cantos de Harris (cv2.cornerHarris): detecta cantos com base em mudanças de gradiente;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Convert to float32
gray = np.float32(gray)

# Apply Harris Corner Detection
harris_corners = cv2.cornerHarris(gray, blockSize=2, ksize=3, k=0.04)
harris_corners = cv2.dilate(harris_corners, None)  # Improve visibility

# Mark detected corners in red
image[harris_corners > 0.01 * harris_corners.max()] = [0, 0, 255]
Note
Nota

Parâmetros:

  • src: imagem de entrada em escala de cinza (deve ser float32);
  • blockSize: tamanho da janela local para cálculo dos gradientes;
  • ksize: tamanho da abertura do operador Sobel (ímpar, por exemplo, 3, 5, 7);
  • k: parâmetro livre do detector de Harris (valores típicos: 0.04 - 0.06).
  • Detector de cantos de Shi-Tomasi (cv2.goodFeaturesToTrack): seleciona os cantos mais fortes em uma imagem;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Detect corners
corners = cv2.goodFeaturesToTrack(gray, maxCorners=100, qualityLevel=0.01, minDistance=10)

# Draw detected corners in blue
for corner in corners:
    x, y = np.int32(corner[0])
    cv2.circle(image, (x, y), 5, (255, 0, 0), -1)
Note
Nota

Parâmetros:

  • image: imagem de entrada em escala de cinza;
  • maxCorners: número máximo de cantos a serem detectados;
  • qualityLevel: qualidade mínima dos cantos detectados (intervalo: 0.01 - 0.1);
  • minDistance: distância mínima entre os cantos detectados.
Note
Estude Mais

Parâmetros do método cv2.circle() para destacar objetos:

  • image: imagem na qual o círculo será desenhado;
  • center_coordinates: coordenadas do centro do círculo, representadas como uma tupla de dois valores: (X, Y);
  • radius: raio do círculo;
  • color: cor da borda do círculo. No formato BGR, passado como uma tupla (por exemplo, (255, 0, 0) para azul);
  • thickness: espessura da borda do círculo em pixels. Um valor de -1 preenche todo o círculo com a cor especificada.

Detecção de Blobs

A detecção de blobs identifica regiões de intensidade semelhante em uma imagem, sendo útil para detecção e rastreamento de objetos.

Um dos métodos populares para detecção de blobs é o SimpleBlobDetector

  • cv2.SimpleBlobDetector: detecta keypoints que representam blobs com base em tamanho, formato e intensidade.
# Set up SimpleBlobDetector parameters
params = cv2.SimpleBlobDetector_Params()

# Adjust parameters for better detection
params.minThreshold = 5
params.maxThreshold = 255
params.filterByArea = True
params.minArea = 100
params.maxArea = 5000
params.filterByCircularity = True
params.minCircularity = 0.02
params.filterByConvexity = True
params.minConvexity = 0.5
params.filterByInertia = True
params.minInertiaRatio = 0.001

# Create detector and detect blobs
detector = cv2.SimpleBlobDetector_create(params)
keypoints = detector.detect(gray)

# Draw blobs on the image
image_with_blobs = cv2.drawKeypoints(image, keypoints, None, (0, 255, 0),
                                     cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
Note
Nota

Parâmetros:

  • minThreshold, maxThreshold: faixa de intensidade para detecção de blobs;
  • filterByArea: ativa o filtro baseado no tamanho do blob;
    • minArea, maxArea: especifica as restrições de tamanho para blobs detectados;
  • filterByCircularity: ativa o filtro baseado na circularidade;
    • minCircularity: valores menores detectam blobs alongados;
  • filterByConvexity: ativa o filtro baseado na convexidade;
    • minConvexity: valores menores permitem formas côncavas;
  • filterByInertia: ativa o filtro baseado na razão de inércia;
    • minInertiaRatio: valores menores detectam blobs alongados.
Tarefa

Swipe to start coding

Você recebe as imagens da fábrica (factory) e dos girassóis (sunflowers):

  • Converter a imagem factory para escala de cinza e armazenar na variável gray_factory;
  • Converter a imagem sunflowers para escala de cinza e armazenar na variável gray_sunflowers;
  • É necessário para o Detector de Harris converter a matriz da imagem para float32, faça isso e armazene em gray_float;
  • Aplique a detecção de cantos de Harris e armazene em harris_corners (parâmetros recomendados: blockSize=2, ksize=3, k=0.04);
  • Utilize dilate() para melhorar a visibilidade de harris_corners;
  • Aplique a detecção de cantos de Shi-Tomasi na imagem e armazene em shi_tomasi_corners (parâmetros recomendados: gray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10)
  • Crie um objeto SimpleBlobDetector_Params para inicializar os parâmetros e armazene em params;
  • Crie um detector de blobs com os parâmetros especificados e armazene em detector;
  • Detecte os keypoints dos blobs e armazene em keypoints.

Solução

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 8
single

single

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

close

Awesome!

Completion rate improved to 3.45

bookDetecção de Cantos e Blobs

Deslize para mostrar o menu

Detecção de Cantos

A detecção de cantos é utilizada para identificar mudanças bruscas de intensidade onde dois contornos se encontram. É útil em correspondência de características, rastreamento de objetos e reconhecimento de estruturas.

Métodos Populares:

  • Detector de cantos de Harris (cv2.cornerHarris): detecta cantos com base em mudanças de gradiente;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Convert to float32
gray = np.float32(gray)

# Apply Harris Corner Detection
harris_corners = cv2.cornerHarris(gray, blockSize=2, ksize=3, k=0.04)
harris_corners = cv2.dilate(harris_corners, None)  # Improve visibility

# Mark detected corners in red
image[harris_corners > 0.01 * harris_corners.max()] = [0, 0, 255]
Note
Nota

Parâmetros:

  • src: imagem de entrada em escala de cinza (deve ser float32);
  • blockSize: tamanho da janela local para cálculo dos gradientes;
  • ksize: tamanho da abertura do operador Sobel (ímpar, por exemplo, 3, 5, 7);
  • k: parâmetro livre do detector de Harris (valores típicos: 0.04 - 0.06).
  • Detector de cantos de Shi-Tomasi (cv2.goodFeaturesToTrack): seleciona os cantos mais fortes em uma imagem;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Detect corners
corners = cv2.goodFeaturesToTrack(gray, maxCorners=100, qualityLevel=0.01, minDistance=10)

# Draw detected corners in blue
for corner in corners:
    x, y = np.int32(corner[0])
    cv2.circle(image, (x, y), 5, (255, 0, 0), -1)
Note
Nota

Parâmetros:

  • image: imagem de entrada em escala de cinza;
  • maxCorners: número máximo de cantos a serem detectados;
  • qualityLevel: qualidade mínima dos cantos detectados (intervalo: 0.01 - 0.1);
  • minDistance: distância mínima entre os cantos detectados.
Note
Estude Mais

Parâmetros do método cv2.circle() para destacar objetos:

  • image: imagem na qual o círculo será desenhado;
  • center_coordinates: coordenadas do centro do círculo, representadas como uma tupla de dois valores: (X, Y);
  • radius: raio do círculo;
  • color: cor da borda do círculo. No formato BGR, passado como uma tupla (por exemplo, (255, 0, 0) para azul);
  • thickness: espessura da borda do círculo em pixels. Um valor de -1 preenche todo o círculo com a cor especificada.

Detecção de Blobs

A detecção de blobs identifica regiões de intensidade semelhante em uma imagem, sendo útil para detecção e rastreamento de objetos.

Um dos métodos populares para detecção de blobs é o SimpleBlobDetector

  • cv2.SimpleBlobDetector: detecta keypoints que representam blobs com base em tamanho, formato e intensidade.
# Set up SimpleBlobDetector parameters
params = cv2.SimpleBlobDetector_Params()

# Adjust parameters for better detection
params.minThreshold = 5
params.maxThreshold = 255
params.filterByArea = True
params.minArea = 100
params.maxArea = 5000
params.filterByCircularity = True
params.minCircularity = 0.02
params.filterByConvexity = True
params.minConvexity = 0.5
params.filterByInertia = True
params.minInertiaRatio = 0.001

# Create detector and detect blobs
detector = cv2.SimpleBlobDetector_create(params)
keypoints = detector.detect(gray)

# Draw blobs on the image
image_with_blobs = cv2.drawKeypoints(image, keypoints, None, (0, 255, 0),
                                     cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
Note
Nota

Parâmetros:

  • minThreshold, maxThreshold: faixa de intensidade para detecção de blobs;
  • filterByArea: ativa o filtro baseado no tamanho do blob;
    • minArea, maxArea: especifica as restrições de tamanho para blobs detectados;
  • filterByCircularity: ativa o filtro baseado na circularidade;
    • minCircularity: valores menores detectam blobs alongados;
  • filterByConvexity: ativa o filtro baseado na convexidade;
    • minConvexity: valores menores permitem formas côncavas;
  • filterByInertia: ativa o filtro baseado na razão de inércia;
    • minInertiaRatio: valores menores detectam blobs alongados.
Tarefa

Swipe to start coding

Você recebe as imagens da fábrica (factory) e dos girassóis (sunflowers):

  • Converter a imagem factory para escala de cinza e armazenar na variável gray_factory;
  • Converter a imagem sunflowers para escala de cinza e armazenar na variável gray_sunflowers;
  • É necessário para o Detector de Harris converter a matriz da imagem para float32, faça isso e armazene em gray_float;
  • Aplique a detecção de cantos de Harris e armazene em harris_corners (parâmetros recomendados: blockSize=2, ksize=3, k=0.04);
  • Utilize dilate() para melhorar a visibilidade de harris_corners;
  • Aplique a detecção de cantos de Shi-Tomasi na imagem e armazene em shi_tomasi_corners (parâmetros recomendados: gray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10)
  • Crie um objeto SimpleBlobDetector_Params para inicializar os parâmetros e armazene em params;
  • Crie um detector de blobs com os parâmetros especificados e armazene em detector;
  • Detecte os keypoints dos blobs e armazene em keypoints.

Solução

Switch to desktopMude para o desktop para praticar no mundo realContinue de onde você está usando uma das opções abaixo
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 8
single

single

some-alt