Я создал поток, посвященный этим типам вопросов для любых языков программирования здесь .
Также упоминается Java . Вот краткое резюме:
Для данного пути вы можете получить такие точки:
p = cs.collections[0].get_paths()[0]
v = p.vertices
x = v[:,0]
y = v[:,1]
Я столкнулся с аналогичной проблемой и наткнулся на это обсуждение списка matplotlib .
В принципе, можно отбросить прорисовку и вызвать основные функции напрямую, а не супер удобный, но возможно. Решение также не является точным пикселем, так как в базовом коде есть, вероятно, некоторая интерполяция.
import matplotlib.pyplot as plt
import matplotlib._cntr as cntr
import scipy as sp
data = sp.zeros((6,6))
data[2:4,2:4] = 1
plt.imshow(data,interpolation='none')
level=0.5
X,Y = sp.meshgrid(sp.arange(data.shape[0]),sp.arange(data.shape[1]))
c = cntr.Cntr(X, Y, data.T)
nlist = c.trace(level, level, 0)
segs = nlist[:len(nlist)//2]
for seg in segs:
plt.plot(seg[:,0],seg[:,1],color='white')
plt.show()
from: http://matplotlib.org/api/path_api.html#module-matplotlib.path
Пользователи объектов Path не должны обращаться к вершинам и массивы кодов. Вместо этого они должны использовать iter_segments (), чтобы получить пары вершин / кодов. Это важно, так как многие объекты Path, как оптимизация, вообще не сохраняют коды, но имеют по умолчанию для них iter_segments ().
В противном случае я не совсем уверен, в чем ваш вопрос. [Zip] - иногда полезная встроенная функция при работе с координатами. 1