我正在尝试将尼康". NEF"文件导入OpenCV。". NEF"是尼康相机拍摄的图片的RAW文件格式的文件扩展名。当我在Mac上的预览中打开该文件时,我看到分辨率为6000 x 4000,图片非常清晰。然而,当我将其导入OpenCV时,我只看到120乘160(RGB通道为3乘)的数据点,这导致分辨率的很大损失。
我的理解是,NumPy数组中有120 x 160个像素,用于存储OpenCV的像素信息。我尝试使用-1作为IMREAD_UNCHANGED标志,但许多像素被遗漏,图像质量受到很大影响。
以下是我的代码,供您参考:
# first Jupyter block
img = cv2.imread('DSC_1051.NEF', -1)
img.shape
执行img.shape
返回(120,160,3)。
# second Jupyter block
cv2.namedWindow("Resize", cv2.WINDOW_NORMAL)
cv2.resizeWindow("Resize", 1000, 700)
# Displaying the image
cv2.imshow("Resize", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
问题总结:
- 原始图像形状为(6000,4000)
- 打开CV导入(120,160),导致分辨率大幅降低
- 使用IMREAD_UNCHANGED标志不会导致OpenCV导入图像中的所有像素,从而导致执行
cv2.imshow()
时图像质量下降。
我的问题:我如何使用OpenCV导入所需的像素数?2是否有一个特定的函数可以使用?3是否缺少一个参数需要传递?
1条答案
按热度按时间wwtsj6pe1#
如果你想用python操作RAW图像而不损失分辨率,你需要检查一个专门的库,比如
rawpy
有关详细信息,可以查看rawpy documentation
how to save .NEF as .jpg
Pillow
)我用这个19.2mb .NEF image测试了代码,得到了以下结果:
| 方法|. jpg输出大小|尺寸|
| - ------|- ------|- ------|
| 公益诉讼|9千字节|320x212|
| CV2|14千字节|320x212|
| * * 破烂**+ PIL|1.4mb|小行星4284 × 2844 |
| * * 劳皮**+ cv2|2.5mb|小行星4284 × 2844 |
show .NEF with cv2