2016-10-23 4 views
0

ich habe einen Code, der Konturen nach dem Anwenden von Filtern auf Videobildern identifiziert. Jetzt in meinem Fall bekomme ich 3 Konturen und ich zeige sie, indem ich Rechtecke um sie zeichne, was ich tun möchte, ist ein Rechteck um all diese 3 Kontur Rechtecke zu zeichnen. es wird ein größeres Rechteck sein, das 3 erkannte Rechtecke enthält. Hier ist mein einfacher Code zum Erkennen und Zeichnen von Rechtecken um Konturen herum.Zeichnung ein Rechteck um alle Konturen in OpenCV Python

im2, contours, hierarchy = cv2.findContours(canny_img,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) 

try: hierarchy = hierarchy[0] 
except: hierarchy = [] 

# computes the bounding box for the contour, and draws it on the frame, 
for contour, hier in zip(contours, hierarchy): 
    (x,y,w,h) = cv2.boundingRect(contour) 
    if w > 80 and h > 80: 
      cv2.rectangle(frame, (x,y), (x+w,y+h), (255, 0, 0), 2) 

cv2.imshow('Motion Detector',frame) 
+0

Was haben Sie versucht? Nimm ein Stück Papier und zeichne es selbst und denke dann über den Algorithmus nach, den du benutzt hast. –

+0

Haben Sie versucht, einen Punktsatz aus allen Konturen zu erstellen und berechnen Sie den "BoundingRect" auf diesem Satz? Vielleicht funktioniert das. – PSchn

Antwort

4

Vielleicht so etwas wie diese versuchen:

im2, contours, hierarchy = cv2.findContours(canny_img,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) 

try: hierarchy = hierarchy[0] 
except: hierarchy = [] 

height, width, _ = canny_img.shape 
min_x, min_y = width, height 
max_x = max_y = 0 

# computes the bounding box for the contour, and draws it on the frame, 
for contour, hier in zip(contours, hierarchy): 
    (x,y,w,h) = cv2.boundingRect(contour) 
    min_x, max_x = min(x, min_x), max(x+w, max_x) 
    min_y, max_y = min(y, min_y), max(y+h, max_y) 
    if w > 80 and h > 80: 
     cv2.rectangle(frame, (x,y), (x+w,y+h), (255, 0, 0), 2) 

if max_x - min_x > 0 and max_y - min_y > 0: 
    cv2.rectangle(frame, (min_x, min_y), (max_x, max_y), (255, 0, 0), 2) 

Im Wesentlichen wollen Sie, um zu verfolgen, was die kleinste x und y-Koordinaten sind und was die größte x und y-Koordinaten (einschließlich der Breite und Höhe) sind, und zeichne dann einfach ein Rechteck mit diesen Koordinaten.

Verwandte Themen