Zamierzam tylko napisać kod i nie przechodzić przez niego, ponieważ jest wiele funkcji i nie chciałbym przyjmować tego, co wiesz lub nie wiesz i spędzić dużo czasu na pisaniu. Jeśli masz , możesz zadawać dowolne pytania o numer, a dodam je do posta.
Poprosiłeś o dopasowanie koła do cienie półksiężyca, więc dopasowałem kręgi do cieni. Ważne jest, aby zdać sobie sprawę, że w jakimś kodzie produkcyjnym, który, jak sądzę, będę musiał przetwarzać wiele obrazów tego rodzaju, konieczne byłoby udoskonalenie dopasowanych okręgów. W szczególności każdy rodzaj analizy strukturalnej tego typu obawia się tylko dopasowania danego kształtu do pikseli, a nie, że przedmiot, którego szukasz, jest tym, czego szukasz.
Celowo zostawiłem tam źle dopasowane koło. Proponuję udać się do otoczka wypukła, lub detektor Haar lub kształt pasujący w zależności od tego, co dokładnie jesteś zainteresowany.
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)
Wyjście obrazu Dostałem
Oba półksiężyce są wyposażone poprawnie z dolnym pasującym do zewnętrznej strony zbiornika, a nie do półksiężyca dokładnie. Możesz zrobić coś w rodzaju śledzenia histerezy i przesuwać ten krąg, aż jego zewnętrzna krawędź znajdzie się dokładnie w półksiężycu dość konsekwentnie.
Istnieje dodatkowe koło, które można usunąć, jeśli dostroisz parametry w prawidłowy sposób, ale odfiltrowanie dokładnie wybranych kół zależy od Ciebie. F.e. jeśli chcesz tylko najwyższego półksiężyca, zapytaj o najmniejszą współrzędną y
, jeśli wszystkie cienie są tak duże, jak te, możesz poprosić o tylko koła o promieniu większym niż próg itd.
masz na myśli ten obszar "półksiężyca" o wierzchołek na obrazie? – Micka
Tak - ciemny cień obecny w górnej połowie obrazu. – Sam
Czy możesz podać obraz wejściowy? –