Je vais juste écrire le code et ne pas le passer parce qu'il y a beaucoup de fonctions et je détesterais supposer ce que vous savez ou ne savez pas et passer beaucoup de temps à faire l'écriture. Si vous avez des questions n'hésitez pas à demander et je vais les ajouter à la poste.
Vous m'avez demandé d'ajuster un cercle aux ombres en croissant, j'ai donc inséré des cercles dans les ombres. Il est important de réaliser que dans une sorte de code de production qui, j'imagine, doit traiter beaucoup d'images de cette nature, il faudrait affiner les cercles ajustés. En particulier, tout type d'analyse structurelle de ce type est juste préoccupé par l'ajustement de la forme donnée aux pixels, pas que l'objet en question soit ce que vous cherchez.
J'ai intentionnellement laissé le cercle mal ajusté là-dedans. Je suggère d'aller pour le enveloppe convexe, ou un détecteur Haar ou correspondant de forme en fonction de ce que vous êtes exactement intéressé.
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)
L'image de sortie je suis arrivé était
Les deux Croissants sont équipés à correctement avec le fond correspondant à l'extérieur du réservoir et non le croissant exactement. Vous pouvez effectuer une sorte de suivi de l'hystérésis et déplacer ce cercle jusqu'à ce que son bord extérieur soit précisément au croissant.
Un cercle supplémentaire peut être supprimé si vous réglez les paramètres correctement, mais que le filtrage des cercles dont vous avez besoin dépend de vous. F.e. si vous voulez seulement le croissant supérieur demander la plus petite coordonnée y
, si toutes les ombres sont aussi grandes que celles-ci vous pouvez demander seulement des cercles de rayons plus grands qu'un certain seuil etc ...
vous voulez dire que "croissant" zone à en haut de l'image? – Micka
Oui- l'ombre sombre présente dans la moitié supérieure de l'image. – Sam
Pouvez-vous fournir l'image d'entrée? –