2011-12-03 27 views
5

Intento usar la función checkContour() en la nueva API pyi api (cv2) y do funciona si creo contornos que se verificarán usando findContours p.Comprobando el área del contorno en opencv usando python

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

sin embargo, cuando se crea el contorno por mi cuenta el siguiente código no funciona

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

y devuelve "error: (-215) contour.checkVector (2)> = 0 & & (contour.depth() == CV_32F || contour.depth() == CV_32S) en función contourArea"

cuando cambio a

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

llegué "error: (-210) La matriz no se puede convertir a señalar secuencia debido a inapropiado tipo de elemento en cvPointSeqFromMat función"

Cómo hacer que el código siguiente en C++ de documentación

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); 

funcionan en la última API de Python (2.3)?

Respuesta

10

Ésta debería funcionar:

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