【问题标题】:What does the array from return of matplotlib.image.imread() mean?matplotlib.image.imread() 返回的数组是什么意思?
【发布时间】:2019-06-13 07:09:19
【问题描述】:

我正在尝试在 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

【问题讨论】:

    标签: python python-3.x numpy matplotlib


    【解决方案1】:

    代码示例的注释很好,这意味着您知道代码实际在做什么。简而言之,

    它占据图像的下半部分并存储在一个变量“bottom_half”中,然后垂直地取所有图像像素的总和,然后将其值返回到一个数组中。

    现在,需要了解的是函数返回的值和使用位置。

    因为您要做的下一件事(根据问题)是找到直方图,而直方图基本上绘制了图像中各种像素的频率。 现在,此直方图将输入单个数组或不需要具有相同长度的数组序列。 (根据 matplotlib documentation

    因此,要绘制直方图,该函数需要一个包含您要绘制直方图的各种像素强度的数组,该数组由您在程序中定义的函数返回。

    简而言之,该函数返回一个包含所有像素值的数组,该数组稍后将用于绘制直方图。

    希望你得到你想要的东西:)

    编辑 ::

    我会尝试打破一些东西,以便让你理解,

    首先是 img.shape,它返回一个包含三个值的元组(图像高度、图像宽度、通道数) -> img.shape[0] 表示它将选择图像的高度,并且在代码中,还将执行地板除以 2,这将给出图像的一半高度(对于除法后的浮点值)。

    这是该行中要理解的两个重要内容。

    所以,它实际上是在对整个图像进行切片,从代码中可以看出。现在,这个切片从图像的一半高度开始,直到图像的最后一行。切片的需要是得到图像的下半部分。 切片这样可以更好的理解,

    img.shape[half_height_start:,:]

    ',' 之前,它将像素从图像的半高到底行切片

    ',' 之后,它会切割图像中的所有行或图像的整个宽度。 要阅读有关 python 中的切片,您可以查看here

    现在是下一个问题,程序正在对垂直列执行 np.sum(),这将返回数组中每一列的总和。该程序实际上是这样做的,因此它将仅打印 n(列数)图像中的列数,这可能是为了更好地可视化绘图。一切都取决于代码。

    你也可以去掉这部分,也可以直接返回bottom_img,但是在这种情况下,直方图会打印所有像素的频率。

    一切都取决于代码。 希望这能消除您的疑虑。

    【讨论】:

    • 感谢您的帮助!我想了解更多关于像素值的信息。 img[img.shape[0]//2:, :] 是什么意思?
    • 另外,为什么需要垂直求和像素值来计算频率?
    • 嘿@Yuki.U 我已经编辑了我的答案并回答了你的问题。如果您理解,请务必接受我的回答并点赞。
    • 非常感谢您的时间和帮助!我现在清楚地明白了这一点。 :)
    猜你喜欢
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 2014-05-16
    • 1970-01-01
    相关资源
    最近更新 更多