我在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: –
顺便说一句,您的解决方案不能解决问题。它实际上将每个质心与它自己的形状进行比较,而不是针对其他形状。 –