Python 作为16位深但意外的plt.show()结果导入的DNG原始图片

Python 作为16位深但意外的plt.show()结果导入的DNG原始图片,python,image-processing,matplotlib,dng,Python,Image Processing,Matplotlib,Dng,试图用Python中的rawpy处理原始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

试图用Python中的
rawpy
处理原始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)

你能分享你的原始文件吗?普通相机似乎不太可能输出不需要去马赛克的DNG。。。或者它不是普通的相机?为什么是彩色空间。如果你不应用去马赛克,Adobe?这是我自发地问自己的,这张照片需要去马赛克吗?但是因为OutPuthBPS=8位,输出是好的,我没有考虑。在奇怪的第二张图片,我看到树在右下角,所以我几乎在那里。我仍然不理解去马赛克化的机制以及何时需要去做和何时不需要去做。非常感谢jdmcbr!我会仔细检查你建议的解决方案。通过网络搜索,我发现PyQtGraph模块能够可视化16位图片。是否有人有此模块的经验?亲爱的JDMCBR,你的建议很好用。谢谢。我正在查看PyQtGraph,这听起来很有希望。太好了,很高兴它有帮助。我对
pyqtgraph
的有限经验并没有鼓励我使用它而不是
matplotlib
,但我希望它对您有用。