首先,对不起,如果这实际上是一个重复-我花了三个小时试图解决这个问题,并没有找到任何解决办法。在
我使用列表来表示坐标[x, y]
。我想知道坐标列表是否不包含指定的坐标。{{cd2>的坐标列表{I}不存在于cd2}的列表中。在
值得注意的是,坐标列表是使用OpenCV函数cv2.findContours()
、cv2.minAreaRect()
和最后的cv2.boxPoints()
生成列表的。这些坐标存储在dict中并从那里访问;调用坐标的print()
给我的坐标格式是[array([3.3, 4.4], dtype=float32), array([5.5, 6.6], dtype=float32)]
,而不是{print()
找到坐标后直接给出cv2.boxPoints()
。在
我试图使用this question的答案,但是我得到了错误ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
。在
该尝试的代码如下所示:
for coordinate in box:
if coordinate not in specialCoordinates:
# operations go here
然后我试图使用this question about a.all()的答案,但是我得到了相同的错误。在
该尝试的代码如下所示:
^{pr2}$我也试过了:
for coordinate in box:
if all(coordinate != special for special in specialCoordinates):
# operations go here
当我在Python2.7解释器中尝试以下操作时,上面提到的格式if coordinate not in specialCoordinates
起作用:
Python 2.7.15(v2.7.15:ca079a3ea3,2018年4月30日,16:30:26)[MSC v.1500 64位(AMD64)]
键入“帮助”、“版权”、“信用证”或“许可证”以获取更多信息。在
>>a=[[3.3,4.4],[5.5,6.6]]
>>>b=[1.1,2.2]
>>>b不在a中
是的
这里的主要问题是列表中的numpy数组元素具有与其相关联的精度,例如:
a = [np.array([3.3, 4.4], dtype='float32'), np.array([5.5, 6.6], dtype='float32')]
相当于:[array([ 3.29999995, 4.4000001 ], dtype=float32), array([ 5.5 , 6.5999999], dtype=float32)]
因此,如果你在a中寻找[3.3,4.4],它就不存在了,所以你可能想玩一下精度或做一些铸造。在
相关问题 更多 >
编程相关推荐