【问题标题】:Problems writing 10-bit/color (Bit Depth) alpha-channelled image写入 10 位/颜色(位深度)alpha 通道图像的问题
【发布时间】:2021-12-15 03:52:53
【问题描述】:

我正在尝试使用 Image 模块创建具有 10 位/颜色(位深)的图像。 我写了以下sn-p,但结果是8位/颜色:

from PIL import Image

im = Image.new("RGBA", (256, 256))
pix = im.load()

for y in range(256):
    for x in range(256):
        pix[x, y] = (1023, 1023, 1023, 255)

im.show()
im.save("10bit.jpg")

虽然图像成功写入新文件,但它仍然编码为 8 位通道:

$ exiftool 10bit.png
Bit Depth                       : 8

$ file 10bit.png
10bit.png: PNG image data, 256 x 256, 8-bit/color RGBA, non-interlaced

我的目标是写Deep color (40-bit)图片:

深色由十亿或更多颜色组成。[15] 230 是 1,073,741,824。通常这是红色、绿色和蓝色各 10 位 (10 bpc)。如果添加相同大小的 Alpha 通道,则每个像素占用 40 位。

我在这里缺少什么?还有其他方法可以创建 10 位 alpha 通道图像吗? (opencv 等)

【问题讨论】:

  • 这能回答你的问题吗? Problems Converting Images from 8-bit to 10-bit
  • JPEG 仅支持 8 位深度。
  • Image.new("RGBA", (256, 256)) -- RGBA 部分将图像指定为“4x8 位像素,带有透明蒙版的真彩色”。那么,既然你明确地创建了一个 8 位图像,为什么你会期望它被保存为除此之外的任何东西?
  • 其实没有。我主要是从像素数组中寻找 10 位原始图像创建,而不是从 8 位转换。 --- 我显然不是要创建一个明确的 8 位图像,我应该在那里使用什么值?我在这里找不到太多关于 10 位像素的信息:pillow.readthedocs.io/en/stable/handbook/concepts.html

标签: python opencv image-processing python-imaging-library bit-depth


【解决方案1】:

PIL/Pillow 无法做到这一点。可用的模式描述为here,并且没有每像素超过 8 位的 RGB 模式。

我建议您使用Numpynp.uint16HxWx3 通道来创建图像并使用scikit-imageOpenCVwand 处理它们,如下所示:

import numpy as np

# Crete empire black image
image = np.zeros((H,W,3), np.uint16)

您没有明确说明要将结果写入哪种格式。如果您澄清这一点,也许我(或其他人)可以建议一个 Python 库。

【讨论】:

  • 谢谢!但是,由于我不熟悉格式,因此我可以使用 Gimp、PS 等打开的任何格式对我来说都可以。 IIUC, "HxWx3" 其中w (width), h (height) of an Image and 3表示每个像素的三种颜色,即RGB。如果我想创建 alpha 通道,是否应该在此处使用 HxWx4 (RGBA)?
  • 是的,HxWx4 适合 RGBA,但最终您会希望能够保存到磁盘。也许您想使用 ImageMagickwandgimp 和 Photoshop(我相信)可以读取的 PAM 格式。 en.wikipedia.org/wiki/Netpbm#PAM_graphics_format 或者如果你在 PyPi 上使用 tifffile,TIFF 可以处理 RGBA 16 位。
猜你喜欢
  • 1970-01-01
  • 2021-05-25
  • 2015-08-04
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
  • 2011-04-23
相关资源
最近更新 更多