首页 > 解决方案 > 如何在 python 上绘制 8 位图像的 16,32 和 64 bin 直方图?

问题描述

我有一个灰度图像数组

  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 位直方图,有人知道吗?

标签: pythonpython-imaging-librarycv2

解决方案


我注意到你有一个 RGB 图像(3 个通道)。您可能希望按每个通道(红色、绿色和蓝色)可视化其直方图。

您可以使用pandas. 例如,给定一个img与变量具有相同数据结构的 RGB 图像数组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

在此处输入图像描述


推荐阅读