Я пытаюсь вычислить область внутри контурной линии в python 2.7. Это нерегулярная область, как следует:Python: вычислить область в пределах нерегулярной контурной линии
В принципе, у меня есть путь контура, сохраненный в следующем пути, и я загрузить его:
AoI_saved=np.load('C:\Users\Roberta\Desktop\Analysis\Pilot2\AoI\AoI_Lev1_'+pict[:-4]+'.npy')
я могу иметь один, два или более контура сохраняются в одном файле. Для каждой области, определенной контурной линией, я должен вычислить площадь. Я никогда не делал что-то подобное, поэтому я старался следовать некоторым учебникам без каких-либо успехов. Я попытался следовать:
n_AoI = len(AoI_saved)
for aa in range(n_AoI):
path = (AoI_saved[0][aa].vertices[:,0],AoI_saved[0][aa].vertices[:,1])
print path
area = cv2.contourArea(path)
print area
Здесь выход пути:
(array([ 731. , 732. , 733. , ..., 730. ,
730.07987317, 731. ]), array([ 445.94074347, 445.88346572, 445.83340569, ..., 446.0051031 ,
446. , 445.94074347]))
и я получаю следующее сообщение об ошибке:
TypeError Traceback (most recent call last)
<ipython-input-6-e982ceaa0723> in <module>()
170 coord = np.array(zip(path[0], path[1]))
171
--> 172 area = cv2.contourArea(path)
173 print area
174
TypeError: contour is not a numerical tuple
Я пытался изменить код следующим образом:
n_AoI = len(AoI_saved)
for aa in range(n_AoI):
path = (AoI_saved[0][aa].vertices[:,0],AoI_saved[0][aa].vertices[:,1])
coord = np.array(zip(path[0], path[1]))
print coord
area = cv2.contourArea(coord)
print area
Координатный выход:
[[[ 731. 445.94074347]
[ 732. 445.88346572]
[ 733. 445.83340569]
...,
[ 730. 446.0051031 ]
[ 730.07987317 446. ]
[ 731. 445.94074347]]]
Здесь новая ошибка:
error Traceback (most recent call last)
<ipython-input-14-354ae41b1566> in <module>()
170 coord = np.array(zip(path[0], path[1]))
171
--> 172 area = cv2.contourArea(coord)
173 print area
174
error: ..\..\..\..\opencv\modules\imgproc\src\contours.cpp:1904: error: (-215) contour.checkVector(2) >= 0 && (contour.depth() == CV_32F || contour.depth() == CV_32S) in function cv::contourArea
Одна из моих проблем является то, что это на самом деле не ясно мне, что аргумент cv2.contourArea
принимает?
Что является самым простым способом рассчитать форму Района?
Если вы не используете openCV, вы можете использовать красивые картинки. Это довольно просто, вы создаете геометрию, и у вас есть атрибут 'area' для геометрии: http://toblerity.org/shapely/shapely.geometry.html – kikocorreoso
Нет, это необязательно. Я тоже попробую с этим методом! Спасибо! – R0bs
Я взглянул на этот метод! Мне непонятно, какие данные вы можете использовать «область». Я видел много примеров с regulat polygons, где я могу передавать вершины или некоторые точки. В моем случае у меня всегда нерегулярная фигура. Вы можете мне помочь? – R0bs