2014-01-05 2 views
0

Я пытаюсь использовать opencv python interface cv2, чтобы определить, является ли многоугольник выпуклым. Из всего, что я нашел в Интернете, входной контур должен быть многочисленным массивом кортежей float32 для каждой точки. Поэтому я предположил это работать так:Создать контур с нуля в python OpenCV (cv2)

import cv2, numpy 
contour = numpy.array([ 
(378, 949), (375, 940), (368, 934), 
(359, 932), (350, 937), (345, 955), 
(351, 962), (359, 966), (368, 964), 
(376, 958) ], numpy.float32) 
cv2.isContourConvex(contour)

Но я получаю эту ошибку:

OpenCV Error: Unsupported format or combination of formats (The matrix can not be converted to point sequence because of inappropriate element type) in cvPointSeqFromMat, file /tmp/buildd/opencv-2.3.1/modules/imgproc/src/utils.cpp, line 59

Может кто-нибудь сказать мне, какой тип элемента было бы целесообразно и как поэтому создать контур с нуля ?

+0

Угадайте: вы можете изменить dtype с float на int –

ответ

1

OpenCV ожидает, что точки изображения будут целые кортежами, просто изменить их типа в целом:

>>> import cv2 
>>> import numpy as np 
>>> contour = np.array([(378, 949), (375, 940), (368, 934), (359, 932), 
... (350, 937), (345, 955), (351, 962), (359, 966), (368, 964), 
... (376, 958) ], dtype=np.int) 
>>> cv2.isContourConvex(contour) 
True 
+0

Я уже пробовал это раньше, но это приводит к ошибке: Утверждение не выполнено (contour.checkVector (2)> = 0 && (contour.depth() = = CV_32F || contour.depth() == CV_32S)) в isContourConvex, файл /tmp/buildd/opencv-2.3.1/modules/imgproc/src/contours.cpp, строка 1737 –

1

Это была проблема с установкой OpenCV на тестировании Debian. После установки openCV 2.4.8 из источника он работает. Спасибо за помощь!

Смежные вопросы