0

我正在尝试正确读取 Nikon RAW (NEF) 图像,并发现有一些建议;rawpy、imageio 和简单的 numpy 读取:

Python中的RAW图像处理

但是,在读取尼康 RAW 图像时,我得到了一些奇怪的结果(到目前为止,imageio 不适用于索尼 ARW,我想读取的另一种格式)。

代码在这里:

# -*- coding: utf-8 -*-
"""
Code to import RAW image from Nikon NEF file, in two ways.  
Display with opencv and matplotlib 
"""

import numpy as np
import cv2
import rawpy
import matplotlib
import matplotlib.pyplot as plt
import imageio

# Reading a Nikon RAW (NEF) image
# This uses rawpy library
filename='DSC_0001.NEF'

print("reading RAW file using rawpy.")
raw = rawpy.imread(filename)
image_rawpy = raw.postprocess()
print("Size of image read:" + str(image_rawpy.shape))

# Optional 
# Convert RGB to BGR 
# image_rawpy = image_rawpy[:, :, ::-1].copy()

####################
# Show using matplotlib
fig = plt.figure("image_rawpy read file: " + filename)
plt_image = image_rawpy
imgplot = plt.imshow(plt_image)
plt.show(block=False)
# Show using OpenCV
cv2.imshow("image_rawpy read file: " + filename, image_rawpy)

####################
# This uses imageio 
print("reading RAW file using rawio.")
image_imageio=imageio.imread(filename)
print("Size of image read:" + str(image_imageio.shape))
fig2 = plt.figure("image_imageio read file: " + filename)
plt_image2 = image_imageio
imgplot2 = plt.imshow(plt_image2)
plt.show(block=False)
# Show using OpenCV
cv2.imshow("image_imageio read file: " + filename, image_imageio)


cv2.waitKey()
cv2.destroyAllWindows()

使用 rawpy 读取时,它会读取数组的完整大小(4000x6000),但使用 imageio 时,它似乎只能读取缩略图(120x160)。rawpy 方法显示了一个带有一点粉红色色调的图像(见下面的注释),而 imageio 方法是一个简单的灰度图像。

幸运的是,这些结果在 Ubuntu 和 Win10 机器上是相同的。

[注意 - 尼康相机设置为红外摄影,内部移除和添加滤镜,我们无法访问。这将影响到传感器的内容,但从软件方面应以相同的方式查看生成的图像。]

问题

在 Python 中读取 Nikon RAW 图像的更好方法是什么?是否遗漏了规范参考?

4

0 回答 0