So erkennen Sie (die meisten) gemörtelten Steine ​​mit OpenCV findContoursPython

Python-Programme
Guest
 So erkennen Sie (die meisten) gemörtelten Steine ​​mit OpenCV findContours

Post by Guest »

Ich muss möglichst viele der gemörtelten Steine ​​in einem Straßenbereich korrekt umreißen. Der folgende Code erkennt einige davon korrekt im Steinbild „in.jpg“, aber es ist nicht ersichtlich, warum viele unentdeckt bleiben oder nur teilweise umrissen sind. Ich möchte auch Fälle wie Kontur 56, 57 oder 92 beheben, indem ich die Tatsache ausnutze, dass die Steine ​​ausgerichtet sind und ein meist ovales Bild mit erkannten Konturen „out.jpg“ aufweist. Ich weiß, wie man die offensichtlichen Ausreißer entfernt, aber vorher muss ich die Erkennungsmethode verbessern.

Code: Select all

import cv2
img = cv2.imread('in.jpg')
gray = cv2.bitwise_not(img)
gray = cv2.cvtColor(gray, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (113, 113), 0)
thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 61, 2)
thresh = cv2.dilate(thresh, None, iterations=5)
thresh = cv2.erode(thresh, None, iterations=1)
cnts, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
print(f'Found {len(cnts)} contours')
cv2.drawContours(img, cnts, -1, (0, 255, 0), 2)
centroids = [cv2.moments(c) for c in cnts]
for i, c in enumerate(centroids):
cv2.putText(img, str(i), (int(c['m10'] / c['m00']), int(c['m01'] / c['m00']) - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 0, 255), 2)
cv2.imwrite('out.jpg', img)
Die verschiedenen Parameter (Unschärfe 113 usw.) wurden durch Versuch und Irrtum ermittelt.
Es reicht nicht aus, nur die Steine ​​zu zählen, Ich muss ihre Form so genau wie möglich nachahmen.
Vielen Dank für Ihre Vorschläge!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post