python – 重新调整PIL图像的强度
发布时间:2020-12-20 11:11:35 所属栏目:Python 来源:网络整理
导读:重新调整PIL图像强度的最简单/最简洁的方法是什么? 假设我有一个来自12位摄像机的16位图像,因此只使用值0-4095.我想重新调整强度,以便使用整个范围0-65535.当图像表示为PIL的图像类型时,最简单/最干净的方法是什么? 我到目前为止提出的最佳解决方案是: pi
重新调整PIL图像强度的最简单/最简洁的方法是什么?
假设我有一个来自12位摄像机的16位图像,因此只使用值0-4095.我想重新调整强度,以便使用整个范围0-65535.当图像表示为PIL的图像类型时,最简单/最干净的方法是什么? 我到目前为止提出的最佳解决方案是: pixels = img.getdata() img.putdata(pixels,16) 这是有效的,但总是将四个最低有效位留空.理想情况下,我想将每个值向左移位四位,然后将四个最高有效位复制到四个最低有效位.我不知道该怎么做. 解决方法
既然你知道像素值是0-4095,我找不到比这更快的方法:
new_image= image.point(lambda value: value<<4 | value>>8) 根据documentation,无论图像大小如何,lambda函数最多都会被调用4096次. 编辑:由于赋予point的函数必须是I映像中的形式参数* scale offset,因此使用point函数这是最好的: new_image= image.point(lambda argument: argument*16) 最大输出像素值为65520. 第二步: 您自己的解决方案的修改版本,使用itertools提高效率: import itertools as it # for brevity import operator def scale_12to16(image): new_image= image.copy() new_image.putdata( it.imap(operator.or_,it.imap(operator.lshift,image.getdata(),it.repeat(4)),it.imap(operator.rshift,it.repeat(8)) ) ) return new_image 这避免了点函数参数的限制. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |