Saltar al contenido

OpenCV detecta intersección de contornos

Solución:

Una forma simple pero quizás no la más eficiente (??) sería usar drawContours para crear dos imágenes: una con el contorno del coche y otra con el contorno del obstáculo.

Luego and juntos, y cualquier punto que aún sea positivo serán puntos de intersección.

Algún pseudocódigo (yo uso la interfaz de Python, por lo que no obtendría la sintaxis de C ++ correcta, pero debería ser lo suficientemente simple como para que lo convierta):

import numpy as np # just for matrix manipulation, C/C++ use cv::Mat
# find contours.
contours,h = findContours( img, mode=RETR_LIST, method=CHAIN_APPROX_SIMPLE )
# Suppose this has the contours of just the car and the obstacle.

# create an image filled with zeros, single-channel, same size as img.
blank = np.zeros( img.shape[0:2] )

# copy each of the contours (assuming there's just two) to its own image. 
# Just fill with a '1'.
img1 = drawContours( blank.copy(), contours, 0, 1 )
img2 = drawContours( blank.copy(), contours, 1, 1 )

# now AND the two together
intersection = np.logical_and( img1, img2 )

# OR we could just add img1 to img2 and pick all points that sum to 2 (1+1=2):
intersection2 = (img1+img2)==2

Si miro intersection Obtendré una imagen que es 1 donde los contornos se cruzan y 0 en todas partes.

Alternativamente, puede completar el completo contorno (no solo el contorno, sino también el relleno del interior) con drawContours( blank.copy(), contours, 0, 1, thickness=-1 ) y luego el intersection La imagen contendrá el área de intersección entre los contornos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *