2017-07-29 67 views
-3

我不明白这行代码在做什么。试图理解布尔数组索引

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

这将是巨大的,如果我能得到一个等效代码。

+0

它将'harris_corners'大于图像中所有'harris_corners'元素的最大值0.025的位置设置为255红色,127绿色和127蓝色。 –

+0

什么类型的变量是'image'?一个numpy数组? –

+1

在行前打印'image'。在行后面打印'image'。比较。还有问题吗? – timgeb

回答

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]) 

基本上,它替换是通过99.

在你的情况下,最大的大于25%的值,元素是RGB像素,而不是整数,但语法和原理是一样的。