我对Python还是很陌生,并且在理解以下代码的工作方式方面很挣扎。
我将图像读入numpy数组。与此类似:
# Read the image
image = mpimg.imread('images/rgb-road.png')
此后,我设置了一个三值边界列表rgb_boundary [123,231,122]。这些值无关紧要。
然后是令人困惑的部分。
boundary = (image[:,:,0] < rgb_boundary[0]) \
| (image[:,:,1] < rgb_threshold[1]) \
| (image[:,:,2] < rgb_threshold[2])
image[boundary] = [0,0,0]
这是由于我对Python语法的了解不足以及使用图片导致的。
如果有人可以解释以上代码中发生的事情,我将非常高兴。特别是在具有image [boundary]分配的行中。我的图片值已更改,但是我不知道这在Python中是如何工作的。
此外,如果有资源可以让我阅读它的工作方式/原因,请随时向我推荐。
谢谢!
答案 0 :(得分:0)
让我们从第一个执行的片段开始:
image[:,:,0] < rgb_boundary[0]
现在,rgb_boundary[0]
就是123
,所以这样做是找到图像中第一种颜色(红色)小于123强度的位置(大约是255的一半亮度)是最大亮度)。
以上表达式的结果将是一个2D布尔数组,红色字节小于123的地方为True,其他地方为False。
然后我们可以理解以下代码:
boundary = (image[:,:,0] < rgb_boundary[0]) \
| (image[:,:,1] < rgb_boundary[1]) \
| (image[:,:,2] < rgb_boundary[2])
它正在创建一个名为boundary
的2D蒙版,对于红色小于123或绿色小于231或蓝色小于122的任何像素,它将为True
。 False
在任何不满足这些条件的地方。
最后:
image[boundary] = [0,0,0]
这会将所选像素设置为黑色。在NumPy中,可以将boundary
之类的布尔掩码与“ fancy indexing”一起使用,以创建数组的“视图”。在这种情况下,无论[0,0,0]
条件为image
的何处,“视图”都将boundary
(黑色)分配给True
。