我试图用python 3编写一个程序,该程序获取图像高度的下半部分,然后绘制其直方图。 我以下面的代码为例。 但我不知道它返回的原因和价值。我不知道要操作什么值,这行实际上是做什么的?
img[img.shape[0]//2:, :]
示例代码
import numpy as np
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
# Load our image
# `mpimg.imread` will load .jpg as 0-255, so normalize back to 0-1
img = mpimg.imread('warped_example.jpg')/255
def hist(img):
# TO-DO: Grab only the bottom half of the image
# Lane lines are likely to be mostly vertical nearest to the car
bottom_half = img[img.shape[0]//2:, :]
# TO-DO: Sum across image pixels vertically - make sure to set `axis`
# i.e. the highest areas of vertical lines should be larger values
histogram = np.sum(bottom_half, axis=0)
return histogram
答案 0 :(得分:1)
该代码示例的注释很好,这意味着您了解了代码的实际作用。简而言之,
它占据图像的下半部分,并存储在变量“ bottom_half”中,然后,它垂直获取所有图像像素的总和,然后将其值返回到数组中。
现在,需要了解的是函数返回值的含义以及在何处使用
。由于接下来要做的事情(根据问题)是找到直方图,直方图基本上是绘制图像中存在的各种像素的频率。 现在,此直方图将输入单个数组或不需要相同长度的数组序列。 (根据matplotlib documentation)
因此要绘制直方图,函数需要一个数组,该数组包含要绘制直方图的各种像素强度,并由程序中定义的函数返回。
简而言之,该函数正在返回一个包含所有像素值的数组,该数组稍后将用于绘制直方图。
希望您能找到想要的东西:)
编辑::
我会尝试破坏事物,以使您更好地理解
首先是img.shape,这将返回三个值的元组(图像高度,图像宽度,通道数) -> img.shape [0]表示它将拾取图像的高度,并且如代码中所示,还将执行地板除以2的操作,这将给出图像的一半高度(对于除后的Float值)。
这是该行要理解的两个重要内容。
因此,实际上它是在对整个图像进行切片,如从代码中可以看到的那样。现在,此切片从图像高度的一半开始到图像的最后一行。切片的需要是获取图像的下半部分。 这样可以更好地理解切片,
img.shape [half_height_start:,:]
在','之前,它将像素从一半高度切到图像的底行
,在','之后,它将切片图像中的所有行或图像的整个宽度。 有关阅读python切片的信息,您可以查看here
现在下一个问题是,程序正在垂直列上执行np.sum(),它将返回数组中每一列的总和。该程序实际上是在这样做,以便只打印n(列数)图像中的列数,以便更好地显示图形。这完全取决于代码。
您也可以删除此部分,也可以直接返回bottom_img,但是在这种情况下,直方图将打印所有像素的频率。
这完全取决于代码。 希望这能消除您的疑问。