我在Python編程中遇到了很多麻煩,主要是因爲我是初學者。python中包含形狀拐角和質心的數據結構
我首先將findContours應用於圖片,並且必須將檢索到的形狀拐角和形狀質心保存在數據結構中以供後面的修改使用。
我創建看起來像這樣(形狀的數量是未知的)的形狀的數據結構:
Shapes = [[shape1-Corners],
[shape2-Corners],
[shape3-Corners],
[...]
[shapeN-Corners]]
和含有中心(再次形狀的數量是未知的)另一個問題:
Centers = [x0, y0, x1, y1, x2, y2,...,xn, yn]
現在我要訪問這兩個結構中的數據,並執行pointPolygonTest檢查的形狀是裏面一個又一個,但當然這真的很難(因爲我明白,這個解決方案有兩個數據結構不是最好的)
這是我寫的訪問數據結構的代碼:
for k in range(0, len(centers), 2):
nowcx = centers[k]
nowcy = centers[k+1]
for j in range(len(shapes)):
if cv2.pointPolygonTest(shapes[j],(nowcx, nowcy),False)==1:
print "inside"
else:
print "outside"
爲了便於理解,這是在紅色的質心的畫面。你可以看到有三種形狀:三角形,正方形和五角形。所以數據結構包含3個形狀的3個記錄和3個質心的6個元素。
https://www.dropbox.com/s/vibl0h0y4ses1za/graph.png
輸出給我9個比較,當它們應該是實際3:
- 三角形針對正方形 - >外針對五邊形
- 三角形 - >內部
- 平方againstr五邊形 - >裏面
這就是輸出:
inside
outside
inside
outside
inside
inside
inside
outside
inside
我在做什麼錯?請幫幫我。 在此先感謝!
第一個解決方案我實際上工作將形狀[k/2]放在pointPolygonTest中。所以這行代碼將是:如果cv2.pointPolygonTest(形狀[k/2],(nowcx,nowcy),False)== 1: –
順便說一句,您的解決方案不能解決問題。它實際上將每個質心與它自己的形狀進行比較,而不是針對其他形狀。 –