OpenCV: Creación de una máscara binaria a partir de la imagen
Tengo esta imagen y quiero crear una máscara binaria a partir de ella. El rectángulo principal (el más grande) debe ser blanco y otras partes de la imagen deben ser negras. Como esta:
Para resolver este problema, quiero encontrar un contorno del rectángulo principal. Mi plan es encontrar todos los contornos externos. Luego obtener el contorno con el área más alta. En primer lugar, intenté encontrar todos los contornos y graficarlos como una imagen binaria. Mi intento:
Pero incluso este código simple no encontró ningún contorno. ¿Qué pasa con eso? ¿Y cómo obtener el contorno con el área más alta? ¿Quizás debería aplicar el algoritmo Canny aquí? Por favor, ayúdame.
davy.ai
La razón por la cual el código no encontró ningún contorno es porque la imagen no fue correctamente segmentada antes de pasarla a
cv2.findContours()
. Por lo tanto, los contornos no fueron detectados. Para solucionar este problema, podemos utilizar una función básica de segmentación comocv2.threshold()
. Aquí está el código modificado:Este código debería ser capaz de encontrar los contornos en la imagen. Para obtener el contorno con el área más grande, podemos ordenar los contornos en orden descendente de sus áreas utilizando la función
cv2.contourArea()
y seleccionar el primer contorno. Aquí está el código modificado:Este código debería producir la máscara binaria deseada con el rectángulo principal en blanco y otras partes en negro. Aplicar el algoritmo Canny también puede ayudar a afinar aún más la segmentación, pero en este caso, la segmentación simple parece funcionar bien.