带有 pyinsane 的 16 位彩色图像

Posted

技术标签:

【中文标题】带有 pyinsane 的 16 位彩色图像【英文标题】:16-bit color images with pyinsane 【发布时间】:2017-01-19 20:01:33 【问题描述】:

pyinsane 的扫描会话默认返回 8 位 PIL 图像列表。这是真的,即使在 16 位模式下完成了扫描(例如使用透明单元)。有没有办法从 pyinsane 中获取 16 位图像(我想 PIL 不支持)或原始原始数据?

这是我目前正在使用的示例代码并获取 8 位颜色深度的图像:

import pyinsane.abstract as pyinsane
device = pyinsane.get_devices()[0]

device.options['resolution'].value = 1200
device.options['mode'].value = 'Color'
device.options['source'].value = 'Transparency Unit'

scan_session = device.scan(multiple=False)
try:
    while True:
        scan_session.scan.read()
except EOFError:
    pass
image = scan_session.images[0]

【问题讨论】:

【参考方案1】:

你说得对,这是 Pillow (PIL) 的限制。您实际上可以在这里看到从 raw 到 PIL Image 的转换:https://github.com/openpaperwork/pyinsane/blob/master/pyinsane2/sane/abstract.py#L161

如果你真的需要这些额外的数据,我想唯一的选择是直接使用 Sane API 并进行自己的转换:

import pyinsane2.sane.rawapi

pyinsane.sane.rawapi.sane_init()
(...)
pyinsane.sane.rawapi.sane_exit()

不幸的是,这样做会使您失去 Windows 可移植性(WIA 支持),并且 Pyinsane 的这一部分根本没有记录。然而, pyinsane.sane.rawapi 为 Sane C API 提供了很小的转换,使其对 Pythony 更友好。所以我想你可以参考 Sane 文档获取信息:http://www.sane-project.org/html/doc009.html。

【讨论】:

以上是关于带有 pyinsane 的 16 位彩色图像的主要内容,如果未能解决你的问题,请参考以下文章

16位图像的65536种颜色是指彩色,还是灰度(灰阶)?

图像位深度 8位 16位 24位 32位区别对比 RGB 真彩色 基本概念:(大小,深度,通道)位深度数据类型转换原理 Mat数据读取(opencv里的imread)

pyinsane 2 中的图像扫描给出了 StopIteration 错误

如何使用 MFC 将 24 位彩色图像转换为二进制图像?

带有彩色蒙版的语义图像分割

八叉树算法将24位bmp图像转变为8位彩色图像