Что означает массив из возврата matplotlib.image.imread ()? - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь написать программу на 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 Ответ

1 голос
/ 13 июня 2019

Пример кода хорошо прокомментирован, что означает, что вы получили то, что на самом деле делает код. Короче,

Занимает нижнюю половину области изображения и сохраняет ее в переменной "bottom_half", затем берет сумму всех пикселей изображения по вертикали и затем возвращает свое значение в массиве.

Теперь нужно понять, какие значения возвращает функция и где она используется.

Поскольку следующей вещью, которую вы собирались сделать (в соответствии с вопросом), было найти гистограмму, и гистограмма в основном отображает частоту различных пикселей, присутствующих в изображении. Теперь эта гистограмма принимает входные данные одного массива или последовательности массивов, которые не обязательно должны быть одинаковой длины. (Согласно документации matplotlib )

Таким образом, для построения гистограммы функции необходим массив, содержащий различные интенсивности пикселей, из которых вы хотите построить гистограмму и который возвращается функцией, определенной в программе.

Короче говоря, функция возвращает массив, содержащий все значения пикселей, и этот массив будет позже использован для построения гистограммы.

Надеюсь, вы получили то, что искали:)

Редактировать ::

Я постараюсь разбить вещи, чтобы вы хорошо поняли,

во-первых, img.shape, возвращает кортеж из трех значений (высота изображения, ширина изображения, количество каналов) -> img.shape [0] означает, что он выберет высоту изображения, и, как в коде, также выполняется деление на пол, что даст половину высоты изображения (для значения Float после деления).

Это были две важные вещи, которые нужно понять в этой строке.

Итак, на самом деле он нарезает изображение целиком, как это видно из кода. Теперь эта нарезка начинается с половины высоты изображения до последней строки изображения. Нужно было нарезать нижнюю половину изображения. Нарезка может быть лучше понята по этому,

img.shape [half_height_start:,:]

Befor ',' - разрезает пиксели от половины высоты до нижнего ряда изображения

и после ',' он разрезает все строки на изображении или на всю ширину изображения. Для чтения о нарезке в Python вы можете увидеть здесь

теперь следующий вопрос, программа выполняет np.sum () над вертикальными столбцами, которые будут возвращать сумму каждого столбца в массиве. Программа фактически делает это так, что печатает только n (количество столбцов) количество столбцов в изображении, возможно, для лучшей визуализации графика. Все дело в коде.

Вы также можете удалить эту часть и напрямую вернуть bottom_img, но в этом случае гистограмма будет печатать частоту всех пикселей.

Все дело в коде. Надеюсь, это очистит ваши сомнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...