2017-07-29 93 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像素,而不是整數,但語法和原理是一樣的。