我想要计算python 2.7中轮廓线内的区域。它是一个不规则的区域作为如下:Python:计算不规则轮廓线内的区域
基本上,我有保存在以下路径的轮廓的路径和I加载:
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
我看了一下这个方法!我不清楚你可以使用哪种数据“区域”。我看到很多有调节多边形的例子,我可以通过顶点或点。就我而言,我总是有一个不规则的数字。你可以帮我吗? – R0bs