python – 重新调整PIL图像的强度

python – 重新调整PIL图像的强度,第1张

概述重新调整PIL图像强度的最简单/最简洁的方法是什么? 假设我有一个来自12位摄像机的16位图像,因此只使用值0-4095.我想重新调整强度,以便使用整个范围0-65535.当图像表示为PIL的图像类型时,最简单/最干净的方法是什么? 我到目前为止提出的最佳解决方案是: pixels = img.getdata()img.putdata(pixels, 16) 这是有效的,但总是将四个最低有效位留 重新调整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 brevityimport operatordef 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

这避免了点函数参数的限制.

总结

以上是内存溢出为你收集整理的python – 重新调整PIL图像的强度全部内容,希望文章能够帮你解决python – 重新调整PIL图像的强度所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1192299.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存