来自matplotlib.image.imread()返回的数组是什么意思?

时间:2019-06-13 07:09:19

标签: python python-3.x numpy matplotlib

我试图用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

1 个答案:

答案 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,但是在这种情况下,直方图将打印所有像素的频率。

这完全取决于代码。 希望这能消除您的疑问。