Ho bisogno di rilevare le forme e contare l'occorrenza di ogni forma nell'immagine. Ho inizialmente rilevato i contorni e li ho approssimati e contato i vertici in ciascuno dei contorni presenti. Il mio codice sembra in questo modo:Rileva la forma a stella in opencv-python
import cv2
import numpy as np
import collections
import sys
img = cv2.imread(str(sys.argv[1]),0)
ret,thresh = cv2.threshold(img,127,255,0)
contours,hierarchy = cv2.findContours(thresh,1,2)
no_of_vertices = []
i = 0
mask = np.zeros(img.shape,np.uint8)
for contour in contours:
cnt = contour
area = cv2.contourArea(cnt)
if area>150:
epsilon = 0.02*cv2.arcLength(cnt,True)
approx = cv2.approxPolyDP(cnt,epsilon,True)
no_of_vertices.append(len(approx))
counter = collections.Counter(no_of_vertices)
a,b = counter.keys(),counter.values()
i=0
while i<len(counter):
print a[i],b[i]
i = i + 1
il mio codice non funziona per la rilevazione delle stelle in questa immagine:
Quali modifiche devo fare nel codice?
da (denso o spargolo) contorno, prova matc Funzione hShape: http://docs.opencv.org/2.4/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html#double%20matchShapes%28InputArray%20contour1,%20InputArray%20contour2,%20int%20method,%20double%20parameter%29 – Micka
Puoi usare _circularity_ per rilevare le forme: '(4 * pi * area)/(perimetro^2)'. Le forme a stella hanno circolarità attorno a 0,25, ad esempio – Miki