导入为 16 位深的 DNG 原始图片但意外的 plt.show() 结果
DNG raw pictures imported as 16 bit deep but unexpected plt.show() result
尝试用 rawpy
处理 Python 中的原始 DNG 图片,结果很奇怪。
import rawpy
import imageio
from matplotlib import pyplot as plt
path = '/home/stefan/AIJ/RAW.DNG'
with rawpy.imread(path) as raw:
rgb = raw.postprocess()
plt.imshow(rgb)
plt.show()
结果是一个具有 8 位值的 rgb 图片数组,而我的相机生成 14 位原始图片。
可视化 rgb
数组给出了预期的结果:
通过一些谷歌搜索,我了解到可以导入相同的文件,但输出为 16 位。
我在后处理函数中使用了以下参数:
rgb = raw.postprocess(output_bps=16,demosaic_algorithm=None,output_color = rawpy.ColorSpace.Adobe)
现在 rgb
数组包含 16 位值,但可视化结果如下:
有人能告诉我如何获得类似于第一个结果但处理 16 位值的可视化吗?
最初我认为这与我的相机生成 14 位图像而不是 16 位图像有关,但将参数 output_bps
更改为 14 会导致更差的可视化结果。
提前致谢!
根据要求,我会在这里添加 PENTAX K-5 的原始图片,但它有 18MB 大,论坛有 2MB 的限制(可能是将文件传递给您的另一种方式?)。
我认为问题与您阅读图像的方式无关,因为 imshow
不显示 16 位 RGB 图像。因此,如果您有兴趣目视检查 16 位图像的读取结果,我建议您使用
单独检查条带
plt.imshow(rgb[:, :, 0])
每个波段依此类推;或将 rgb 转换为 8 位并显示,
rgb8 = (rgb / 256).astype('uint8')
plt.imshow(rgb8)
尝试用 rawpy
处理 Python 中的原始 DNG 图片,结果很奇怪。
import rawpy
import imageio
from matplotlib import pyplot as plt
path = '/home/stefan/AIJ/RAW.DNG'
with rawpy.imread(path) as raw:
rgb = raw.postprocess()
plt.imshow(rgb)
plt.show()
结果是一个具有 8 位值的 rgb 图片数组,而我的相机生成 14 位原始图片。
可视化 rgb
数组给出了预期的结果:
通过一些谷歌搜索,我了解到可以导入相同的文件,但输出为 16 位。
我在后处理函数中使用了以下参数:
rgb = raw.postprocess(output_bps=16,demosaic_algorithm=None,output_color = rawpy.ColorSpace.Adobe)
现在 rgb
数组包含 16 位值,但可视化结果如下:
有人能告诉我如何获得类似于第一个结果但处理 16 位值的可视化吗?
最初我认为这与我的相机生成 14 位图像而不是 16 位图像有关,但将参数 output_bps
更改为 14 会导致更差的可视化结果。
提前致谢!
根据要求,我会在这里添加 PENTAX K-5 的原始图片,但它有 18MB 大,论坛有 2MB 的限制(可能是将文件传递给您的另一种方式?)。
我认为问题与您阅读图像的方式无关,因为 imshow
不显示 16 位 RGB 图像。因此,如果您有兴趣目视检查 16 位图像的读取结果,我建议您使用
plt.imshow(rgb[:, :, 0])
每个波段依此类推;或将 rgb 转换为 8 位并显示,
rgb8 = (rgb / 256).astype('uint8')
plt.imshow(rgb8)