2

尝试在 Python 中处理原始 DNG 图片,但rawpy结果很奇怪。

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 的限制(可能是另一种传递文件的方式?)。

4

1 回答 1

1

我认为问题与您阅读图像的方式无关,因为imshow它不显示 16 位 RGB 图像。因此,如果您有兴趣目视检查 16 位图像的读取结果,我建议您单独检查波段,使用

plt.imshow(rgb[:, :, 0])

每个频段等等;或将 rgb 转换为 8 位并显示,使用

rgb8 = (rgb / 256).astype('uint8')
plt.imshow(rgb8)
于 2017-01-04T03:50:21.740 回答