带有 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 位彩色图像的主要内容,如果未能解决你的问题,请参考以下文章
图像位深度 8位 16位 24位 32位区别对比 RGB 真彩色 基本概念:(大小,深度,通道)位深度数据类型转换原理 Mat数据读取(opencv里的imread)