Как я могу построить гистограмму 16,32 и 64 ячеек изображения, которое является 8-разрядным на python?

#python #python-imaging-library #cv2

#python #python-imaging-library #cv2

Вопрос:

У меня есть массив изображения в масштабе серого

   Array
  

пример такого массива;

     array([[[142, 142, 142],
    [143, 143, 143],
    [142, 142, 142],
    ...,
    [147, 147, 147],
    [148, 148, 148],
    [143, 143, 143]],

   [[142, 142, 142],
    [142, 142, 142],
    [142, 142, 142],
    ...,
    [148, 148, 148],
    [150, 150, 150],
    [147, 147, 147]],
  

И тип массива равен

     Array.dtype
    dtype('uint8')
  

Я хочу построить гистограммы с 16, 32 и 64 ячейками для этого массива, у кого-нибудь есть идея?

Комментарии:

1. значения массива представлены с помощью uint8 , но сами значения находятся в 0-255 диапазоне (поскольку uint8 могут представлять 2^8 значения). Построение гистограммы значений должно быть простым, если это было вашей путаницей.

Ответ №1:

Я заметил, что у вас есть изображение RGB (3 канала). Вероятно, вы захотели бы визуализировать его гистограмму по каждому каналу (красному, зеленому и синему).

Вы можете легко достичь этого с помощью pandas . Например, учитывая массив изображений RGB img с той же структурой данных, что и ваша переменная Array , вы можете построить гистограмму для каждого канала, преобразовав ее в DataFrame

 import pandas as pd

df = pd.DataFrame({
    'red': img[...,0].ravel(), 
    'green': img[...,1].ravel(), 
    'blue': img[...,2].ravel()
})
  

А затем построить его с помощью plot.hist

 df.plot.hist(bins=n_bins, alpha=.3, xlim=[0,255], color=['red', 'green', 'blue'])
  

Где n_bins — количество ячеек.


Для n_bins=16

введите описание изображения здесь

Для n_bins=32

введите описание изображения здесь

Для n_bins=64

введите описание изображения здесь