【发布时间】:2018-05-30 23:50:09
【问题描述】:
我是这个图像处理的新手。为什么我问这个问题是因为我有一个适用于 RGB 模式但不适用于 P 模式的代码? 所以我得出结论,它与模式有关。我对模式进行了一些基础研究。但没有找到任何简单的解释。如果有人可以帮助我理解这一点,将会很有帮助。
代码:
image=Image.open('image.png')
image.load()
image_data = np.asarray(image)
image_data_bw = image_data.max(axis=2)
non_empty_columns = np.where(image_data_bw.max(axis=0)>0)[0]
non_empty_rows = np.where(image_data_bw.max(axis=1)>0)[0]
cropBox = (min(non_empty_rows), max(non_empty_rows), min(non_empty_columns), max(non_empty_columns))
image_data_new = image_data[cropBox[0]:cropBox[1]+1, cropBox[2]:cropBox[3]+1 , :]
new_image = Image.fromarray(image_data_new)
new_image.save('cropped_image.png')
输入到图片后面的代码:
此图像处于 RGBA 模式。因此代码对此类图像运行良好。但不是 P 模式下的图像。
错误: 我在 P 模式下遇到的错误: 轴 2 超出维度 2 数组的范围
【问题讨论】:
-
这些模式并非特定于 PNG 图像。它们只是以数字形式表示图像数据的不同方式。
-
你能看一下吗?
-
调色板图像的每个像素只有 一个 值(RGB 颜色信息存储在调色板中,这样可以节省空间)。您找到的代码假定每个像素有 3 个值。
-
你看其他答案了吗? PIL 已经开箱即用地做同样的事情,适用于所有模式。在这里使用 numpy 实在是太过分了。
-
您的示例输入图像是 RGB 图像。你有什么 P 模式图像会导致错误?
标签: python python-imaging-library