首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用matplotlib打印带有alpha的灰度图像?

如何使用matplotlib打印带有alpha的灰度图像?
EN

Stack Overflow用户
提问于 2020-03-30 20:16:46
回答 1查看 1.1K关注 0票数 0

我正在编写一个简单的PNG解析器,它可以解码PNG数据并使用matplotlib打印原始像素。我没有问题打印RGB,RGBA和纯灰度。

代码语言:javascript
运行
复制
import matplotlib.pyplot as plt
import numpy as np

with PngParser() as png:
    if png.greyscale:
        plt.imshow(np.array(png.reconstructed_data).reshape((png.height, png.width)), cmap='gray', vmin=0, vmax=255)
        plt.show()
    elif png.greyalhpa:
        ?
    else:
        # RGB, RGBA
        plt.imshow(np.array(png.reconstructed_data).reshape((png.height, png.width, png.bytesPerPixel)))
        plt.show()

其中png.reconstructed_data是一个简单的像素数组。

不幸的是,matplotlib并不明确支持这种形象。以下是文档的引文

支持的数组形状是:(M,N):具有标量数据的图像。使用规范化和颜色映射将这些值映射到颜色。见参数规范,cmap,vmin,vmax。(M,N,3):具有RGB值的图像(0-1浮点数或0-255 int).(M,N,4):具有RGBA值的图像(0-1浮点数或0-255 int),即包含透明度。前两个维度(M,N)定义图像的行和列。

我们的形状是(M,N,2)。

这个问题有什么解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-31 23:37:43

我认为将灰度图像转换为RGB图像是最好的解决方法。您可以通过复制每个通道中的图像来做到这一点。这将允许您处理每个像素具有不同alpha值的图像。

代码语言:javascript
运行
复制
height = 10
width = 10

# example image
img = np.random.random(size=(height, width, 2))

# separate out image and alpha channel
grayscale = img[:, :, 0]
alpha = img[:, :, 1]

# repeat grayscale image for each channel 
rgb_img = np.dstack((grayscale, grayscale, grayscale, alpha))

fig, ax = plt.subplots(1, 3)
ax[0].imshow(grayscale, cmap='gray')
ax[1].imshow(alpha)
ax[2].imshow(rgb_img)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60938820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档