2011-12-03 21 views
5

Provo ad usare la funzione checkContour() nel nuovo python api (cv2) e lo do funziona se creo contorni da controllare usando findContours ad es.Controllo dell'area del contorno in opencv usando python

contours, hierarchy = cv2.findContours(imgGray, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) 
cv2.contourArea(contours[0]) 

tuttavia quando creo contorno per conto mio il seguente codice non funziona

contour = numpy.array([[0,0], [10,0], [10,10], [5,4]]) 
area = cv2.contourArea(contour) 

e restituisce "errore: (-215) contour.checkVector (2)> = 0 & & (contour.depth() == CV_32F || contour.depth() == CV_32S) nella funzione contourArea"

quando cambio a

contour = numpy.array([[0,0], [10,0], [10,10], [5,4]], dtype=numpy.int32) 

ho ottenuto "l'errore: (-210) La matrice non può essere convertito al punto successione a causa di inadeguato elemento di tipo nella funzione cvPointSeqFromMat"

Come rendere il seguente codice in C++ dalla documentazione

vector<Point> contour; 
contour.push_back(Point2f(0, 0)); 
contour.push_back(Point2f(10, 0)); 
contour.push_back(Point2f(10, 10)); 
contour.push_back(Point2f(5, 4)); 

double area0 = contourArea(contour); 

funziona nell'ultima API python (2.3)?

risposta

10

Questo dovrebbe funzionare:

contour = numpy.array([[[0,0]], [[10,0]], [[10,10]], [[5,4]]]) 
area = cv2.contourArea(contour) 
Problemi correlati