ich habe ein Code geschrieben, mit dem ich die Höhe einer Kontur in mm messen möchte mittels OpenCV. Mein jetziger Stand ist, dass ich die für mich wichtigen Konturen finde, die Höhe des minAreaRect() finde und in pixeln anzeigen kann. Ich habe auch eine Kontur, von der ich die Höhe in pixel bestimmen kann und von der ich die Höhe in mm kenne, sodass ich den Wert pixels_per_mm ausrechnen kann, das funktioniert alles. Nur bestimme ich diesen Wert innerhalb meiner Funktion (recht weit "rechts"), sodass, wenn ich ihn abfrage einen Fehler bekomme: UnboundLocalError: local variable 'px_per_mm' referenced before assignment. Dass ich diesen Fehler bekomme kann ich nachvollziehen, allerdings weiß ich nicht, wie ich die Funktion umschreiben kann, damit ich die Variable px_per_mm in der letzten Zeile (cv.putText()) verwenden kann. Da die Frage mit Python und weniger mit OpenCV zusammenhängt, frage ich hier.
Code:
Code: Alles auswählen
def contour_areas(contours):
areas = []
for cnt in contours:
cont_area = cv.contourArea(cnt)
if cont_area >= 2500:
areas.append(cont_area)
cv.drawContours(imgcontours_min_area, cnt, -1, (0, 255, 255), 2)
rect = cv.minAreaRect(cnt)
box = cv.boxPoints(rect)
box = np.int0(box)
cv.drawContours(imgcontours_min_area,[box],0,(0,0,255),2)
(x, y), (w, h), angle = rect
height = []
if h >= 0.8*w and h <= 1.2*w:
height.append(h)
print(height)
px_per_mm = h / 20
print(px_per_mm)
cv.putText(imgcontours_min_area, "w={},h={}".format(round(w, 2), round(h, 2)), (int(x-w/2.2),int(y-h/1.5)), cv.FONT_HERSHEY_SIMPLEX, 0.7, (0,0,255), 2)
return areas
Code: Alles auswählen
cv.putText(imgcontours_min_area, "w={},h={}".format(round(w, 2), round(h, 2)), (int(x-w/2.2),int(y-h/1.5)), cv.FONT_HERSHEY_SIMPLEX, 0.7, (0,0,255), 2)
Code: Alles auswählen
cv.putText(imgcontours_min_area, "w={},h={}".format(round(w, 2), round(h/px_per_mm, 2)), (int(x-w/2.2),int(y-h/1.5)), cv.FONT_HERSHEY_SIMPLEX, 0.7, (0,0,255), 2)
Vielen Dank!