Вычислить площадь контура с помощью opencv для контуров, созданных matplotlib

Мне нужно рассчитать площадь, ограниченную контурной линией. Я использую matplotlib для получения вершин контурной линии, но я не могу преобразовать их в допустимый ввод для метода контура в openCV:

Z = z_func(X, Y, Ql, k[i,j], B)
cs = plt.contour(X, Y, Z,[IncT])
v = cs.collections[0].get_paths()[0].vertices
xy = []
for vv in v:
    xy.append(vv[0])
cnt = np.array(xy)
area = cv2.contourArea(cnt)

Я получаю эту ошибку: ......\opencv-2.4.9.1\modules\imgproc\src\contours.cpp:1904: ошибка: (-215) контур.checkVector(2) >= 0 && (contour.depth () == CV_32F || контур.глубина() == CV_32S) в функции cv::contourArea

: EOF при чтении строки

Кто-нибудь может мне помочь? Заранее спасибо!!!


person Margaral    schedule 25.09.2014    source источник


Ответы (1)


Наконец, я не использовал метод cv2.contourArea. Получите только компонент Y вершин, просуммируйте их абсолютные значения и умножьте на размер сетки:

x = arange(-1.0,10.0,0.05)
y = arange(-1.0,1.0,0.05)

X,Y = meshgrid(x, y) # grid of point

cs = plt.contour(X, Y, Z,[IncT])
p = cs.collections[0].get_paths()[0]
v = p.vertices
y = v[:,1]
s[i,j]=sum(abs(y))*0.05
person Margaral    schedule 30.09.2014