Ich werde nur den Code schreiben und nicht durchgehen, weil es eine Menge Funktionen gibt und ich würde hassen, anzunehmen, was du weißt oder nicht weißt und eine lange Zeit damit verbringst, das Aufschreiben zu machen. Wenn Sie irgendwelche Fragen haben, zögern Sie nicht zu fragen, und ich werde sie in der Post hinzufügen.
Sie haben gebeten, einen Kreis an die Halbmondschatten anzupassen, also habe ich Kreise in die Schatten eingepasst. Es ist wichtig zu erkennen, dass in einer Art von Produktionscode, der, wie ich mir vorstelle, eine Menge Bilder dieser Art verarbeiten müsste, es notwendig wäre, die angepassten Kreise zu verfeinern. Insbesondere ist jede Art von Strukturanalyse dieses Typs nur besorgt über die Anpassung der gegebenen Form an die Pixel, nicht, dass das Objekt in Frage ist, was Sie suchen.
Ich habe absichtlich den falsch eingepassten Kreis dort drin gelassen. Ich würde für die Konvexe Hülle empfehlen, oder Haar-Detektor oder Formschluss je nachdem, was genau sind Sie interessiert.
import cv2
import numpy as np
img = cv2.imread("orig.png", cv2.IMREAD_GRAYSCALE)
ret, thresh = cv2.threshold(img, 80, 255, cv2.THRESH_BINARY_INV)
ero = cv2.erode(thresh, np.ones((5,5)))
dil = cv2.dilate(ero, np.ones((5,5)))
img, contours, hierarchy = cv2.findContours(dil, cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_NONE)
#just for drawing purposes, the cimg is not really required
cimg = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
for cnt in contours:
(x, y), radius = cv2.minEnclosingCircle(cnt)
center = (int(x), int(y))
radius = int(radius)
cv2.circle(cimg, center, radius, (255, 0, 0), 1)
Das Ausgangsbild war ich
bekam
Beide Halbmonde ausgestattet sind, mit der Unterseite passend zu der Außenseite des Tanks und nicht die Mondsichel genau. Sie könnten eine Art Hysterese-Tracking durchführen und den Kreis verschieben, bis der äußere Rand genau halbmondförmig ist.
Es gibt einen zusätzlichen Kreis, der entfernt werden kann, wenn Sie die Parameter genau stimmen, aber das Filtern der genauen Kreise, die Sie benötigen, liegt bei Ihnen. F. e. Wenn Sie nur den oberen Halbmond nach der kleinsten y
Koordinate fragen möchten, wenn alle Schatten so groß wie diese sind, können Sie nur nach Radienkreisen fragen, die größer sind als ein bestimmter Schwellenwert usw.
Sie meinen, dass "Halbmond" an oben im Bild? – Micka
Ja - der dunkle Schatten in der oberen Hälfte des Bildes. – Sam
Können Sie das Eingabebild bereitstellen? –