试图理解布尔数组索引

时间:2017-07-29 16:30:08

标签: python opencv

我无法理解这行代码正在做什么。

image[harris_corners > 0.025*harris_corners.max()] = [255,127,127]

如果我能得到一个等效的代码,那就太好了。

1 个答案:

答案 0 :(得分:3)

我非常喜欢numpy语法,因为它可以逐步理解它。

为了理解:

image[harris_corners > 0.025*harris_corners.max()] = [255,127,127]

您可以在Python控制台中尝试以下操作:

harris_corners
harris_corners.max()
0.025*harris_corners.max()
harris_corners > 0.025*harris_corners.max()
image
image[harris_corners > 0.025*harris_corners.max()]
image[harris_corners > 0.025*harris_corners.max()] = [255,127,127]
image

在每一步中,尝试了解对象是什么,它是什么类型,代表什么以及与前一个对象相比发生了什么变化。

使用虚拟数据,它变为:

>>> import numpy as np
>>> harris_corners = np.random.randint(20, size=10)
>>> harris_corners
array([14, 18,  3,  7, 19,  2, 16, 19,  2,  3])
>>> harris_corners.max()
19
>>> harris_corners > harris_corners.max() * 0.25
array([ True,  True, False,  True,  True, False,  True,  True, False, False], dtype=bool)
>>> harris_corners[harris_corners > harris_corners.max() * 0.25]
array([14, 18,  7, 19, 16, 19])
>>> harris_corners[harris_corners > harris_corners.max() * 0.25] = 99
>>> harris_corners
array([99, 99,  3, 99, 99,  2, 99, 99,  2,  3])

基本上,它将大于最大值25%的值替换为99。

在您的情况下,元素是RGB像素而不是整数,但语法和原则是相同的。