我无法理解这行代码正在做什么。
image[harris_corners > 0.025*harris_corners.max()] = [255,127,127]
如果我能得到一个等效的代码,那就太好了。
答案 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像素而不是整数,但语法和原则是相同的。