【问题标题】:How can I load an image with its alpha channel with skimage?如何使用 skimage 加载具有 alpha 通道的图像?
【发布时间】:2016-05-07 20:37:17
【问题描述】:

我正在使用 Python 的 Anaconda 发行版,其中包含 numpyscipyscikit-image 等内容。

当我打电话时:

from skimage import io
img = io.imread('myimage.png')

它会忽略我的 Alpha 通道,并将图像作为形状为 (W, H, 3) 而不是 (W, H, 4) 的数组返回。如何获取图片的alpha通道?

【问题讨论】:

  • 如果您的文件是带有 alpha 通道的 indexed PNG,并且如果 skimage 使用的后端是枕头,则存在一个错误(在 12 月修复)可能导致要丢失的 alpha 通道:github.com/scikit-image/scikit-image/pull/1790
  • 我不确定我的文件的 PNG 类型。如何判断 PNG 是否为 indexed png?
  • 我从famitsu.com/freegame/tool/chibi/index1.html 之类的页面中获取这些精灵(无法再讲述生成过程,因为它不是由 html 画布而是由服务器端代码制成的)
  • 在我的 Mac 上,我打开文件(即从终端,open myimage.png,或在 Finder 中双击),它使用预览查看文件。在预览中,使用工具/显示检查器打开一个包含图像信息的窗口。在 Linux 中,您可以使用 pnginfo 之类的东西,或者图像编辑器可能会显示信息。我不怎么使用 Windows,所以我不知道那里最简单的选择是什么。
  • @StepanYakovenko,我看到你为这个问题添加了赏金。您安装了哪些版本的scikit-imagepillow?我刚刚尝试使用 scikit-image 0.15.0 和枕头 6.0.0 读取两个具有 alpha 通道的不同 PNG 文件(一个被索引,另一个没有)。在这两种情况下,图像(包括 Alpha 通道)都被正确读取。

标签: python numpy anaconda scikit-image


【解决方案1】:

一些 PNG 图像从一开始就包含 alpha 通道。 就这么简单

from skimage import io
img = io.imread('myimage.png')

返回(W, H, 4)

有时,使用 PNG 或 JPG 图像无法获得 aRGB,您可以尝试

import cv2
img = cv2.imread('myimage.png')
img_a = cv2.cvtColor(img, cv2.COLOR_RGB2RGBA)
print(img_a.shape) #(W, H, 4)

正如skimage.iocv2.imread 返回一个<class 'numpy.ndarray'> 一样,您可以将两者互换用于任何操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多