簡體   English   中英

來自matplotlib.image.imread()返回的數組是什么意思?

[英]What does the array from return of matplotlib.image.imread() mean?

我正在嘗試在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

該代碼示例的注釋很好,這意味着您了解了代碼的實際作用。 簡而言之,

它占據圖像的下半部分,並存儲在變量“ bottom_half”中,然后垂直吸收所有圖像像素的總和,然后將其值返回到數組中。

現在,需要了解的是函數對返回值的重視程度以及在何處使用它。

由於接下來要做的(根據問題)是找到直方圖,而直方圖基本上是繪制圖像中存在的各種像素的頻率。 現在,此直方圖將輸入單個數組或不需要相同長度的數組序列。 (根據matplotlib 文檔

因此,要繪制直方圖,函數需要一個數組,其中包含要繪制直方圖的各種像素強度,並由程序中定義的函數返回。

簡而言之,該函數將返回一個包含所有像素值的數組,該數組稍后將用於繪制直方圖。

希望你得到了你想要的:)

編輯::

我會嘗試打破事物,以使您更好地理解,

首先是img.shape,這將返回三個值(圖像高度,圖像寬度,通道數)的元組-> img.shape [0]表示它將選擇圖像的高度,並按照代碼將地板除以2也將執行該操作,該操作將給出圖像的一半高度(表示除法后的浮點值)。

這是該行要理解的兩個重要事項。

因此,實際上它是在對整個圖像進行切片,正如從代碼中可以看到的那樣。 現在,此切片從圖像高度的一半開始到圖像的最后一行。 切片的需要是獲取圖像的下半部分。 這樣可以更好地了解切片

img.shape [half_height_start:,:]

','之前,它將像素從一半的高度切到圖像的底行

之后”,它將切片圖像中的所有行或圖像的整個寬度。 有關在python中切片的更多信息,請參見此處

現在,下一個問題是程序在垂直列上執行np.sum(),它將返回數組中每一列的總和。 該程序實際上是在這樣做,以便只打印n(列數)圖像中的列數,以便更好地顯示圖形。 這完全取決於代碼。

您也可以刪除此部分,也可以直接返回bottom_img,但是在這種情況下,直方圖將打印所有像素的頻率。

這完全取決於代碼。 希望這能消除您的疑問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM