我想要計算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