Aquí hay un enfoque simple en el código de Python. (But as I stated in my comment below, It is not an universal answer applicable everywhere, It is just to show finding contour inside a contour can be done. And if your images are different, then you have to come with some different constraints other than i mentioned below
)
Lo que está haciendo después de encontrar Contornos es que comprueba si el área de cada contorno es menor que un valor especificado (di 10000, solo una conjetura), si no es un contorno más grande, evítelo. Si el valor es menor que el especificado, puede ser nuestro cuadrado o rectángulo al lado.
Así que encontramos su ancho y alto y verificamos si la relación de aspecto es cercana a 1. Si es así, es nuestro cuadrado.
import cv2
import numpy as np
img = cv2.imread('sofcnt.jpg')
gray = cv2.imread('sofcnt.jpg',0)
ret,thresh = cv2.threshold(gray,127,255,1)
cont,hier = cv2.findContours(thresh,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
for cnt in cont:
approx = cv2.approxPolyDP(cnt,0.02*cv2.arcLength(cnt,True),True)
if cv2.contourArea(cnt) < 10000:
x,y,w,h = cv2.boundingRect(cnt)
if w/float(h) < 2:
cv2.drawContours(img,[cnt],0,255,-1)
cv2.imshow('a',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Resultado:
¿Puede dar más información? ¿Cuál es el criterio de detección que llena el contorno? – ArtemStorozhuk