从图像中去除背景(边缘)并绘制直方图

时间:2019-05-27 05:59:33

标签: python numpy matplotlib python-imaging-library

我要使用python删除图像的背景并绘制图像其余部分的直方图(条形图)。特别是,我想删除图像已嵌入其中的黑色背景。黑色背景位于图像的右上角,左上角,右下角和左下角。以下是我的图片:

enter image description here

图像的有用部分是中心的圆形物体,我想为图像的有用部分绘制直方图。如何删除上述背景并绘制直方图?

以下是我到目前为止所做的代码。

from PIL import Image
import matplotlib.pyplot as plt
from matplotlib.pyplot import bar
import numpy as np

im_gray = Image.open('image.png').convert('L')
im_arr = np.array( im_gray )
im_flat = im_arr.ravel()

mark_bkg = np.where( im_flat != im_arr[0,0]  )[0]
im_no_bkg = im_flat[ mark_bkg ]

hist, bin_edges = np.histogram(im_no_bkg, bins=30, density=False)

plt.figure(1)
bar( x=bin_edges[:-1], height=hist, width=1.0, bottom=None, align='center', data=None )
plt.show()

1 个答案:

答案 0 :(得分:0)

如果您将图像存储为grayscale [0-255]。

要隐藏black 255背景,请在图像上应用mask()

# Removing black background
img = np.array([...])
img = np.ma.masked_equal(img, 255)

# Plotting histogram
plt.hist(img.ravel(), bins=256, range=(0.0, 1.0), fc='k', ec='k')
plt.show()

Plotting