Detecçã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]
Parâmetros:
src
: imagem de entrada em escala de cinza (deve serfloat32
);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)
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.
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)
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.
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ávelgray_factory
; - Converter a imagem
sunflowers
para escala de cinza e armazenar na variávelgray_sunflowers
; - É necessário para o Detector de Harris converter a matriz da imagem para
float32
, faça isso e armazene emgray_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 deharris_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 emparams
; - 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
Obrigado pelo seu feedback!
single
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Awesome!
Completion rate improved to 3.45
Detecçã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]
Parâmetros:
src
: imagem de entrada em escala de cinza (deve serfloat32
);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)
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.
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)
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.
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ávelgray_factory
; - Converter a imagem
sunflowers
para escala de cinza e armazenar na variávelgray_sunflowers
; - É necessário para o Detector de Harris converter a matriz da imagem para
float32
, faça isso e armazene emgray_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 deharris_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 emparams
; - 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
Obrigado pelo seu feedback!
single