gan*_*kar 1 python opencv image image-processing rawimage
我正在尝试将 Nikon '.NEF' 文件导入 OpenCV。“.NEF”是尼康相机拍摄的照片的 RAW 文件格式的文件扩展名。当我在Mac上以预览方式打开该文件时,我看到分辨率为6000 x 4000,并且图片非常清晰。然而,当我将其导入 OpenCV 时,我只能看到 120 x 160(RGB 通道为 3)个数据点,这会导致分辨率的大幅损失。
我的理解是,NumPy 数组中有 120 x 160 个像素,存储有关 OpenCV 像素的信息。我尝试使用 -1 作为 IMREAD_UNCHANGED 标志,但许多像素被遗漏,图像质量受到很大影响。
供您参考,这是我的代码:
# first Jupyter block
img = cv2.imread('DSC_1051.NEF', -1)
img.shape
Run Code Online (Sandbox Code Playgroud)
执行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()
Run Code Online (Sandbox Code Playgroud)
问题摘要:
cv2.imshow()。我的问题:如何使用 OpenCV 导入所需数量的像素?有我可以使用的特定功能吗?我是否缺少要通过的参数?
如果你想用 python 处理 RAW 图像而不丢失分辨率,你需要检查一个专门的库,比如rawpy
import rawpy\n\nwith rawpy.imread(\'filename.NEF\') as raw:\n raw_image = raw.raw_image\nRun Code Online (Sandbox Code Playgroud)\n您可以查看rawpy文档以获取更多信息
\n笔记:
\n示例1: how to save .NEF as .jpg
选项A: rawpy + Pillow(你也需要安装Pillow)
import rawpy\nfrom PIL import Image\n\nwith rawpy.imread(\'filename.NEF\') as raw:\n rgb = raw.postprocess(use_camera_wb=True)\n Image.fromarray(rgb).save(\'image.jpg\', quality=90, optimize=True)\nRun Code Online (Sandbox Code Playgroud)\n选项B: rawpy + cv2
\nimport rawpy\nimport cv2\n\nwith rawpy.imread(\'filename.NEF\') as raw:\n rgb = raw.postprocess(use_camera_wb=True)\n bgr = cv2.cvtColor(rgb, cv2.COLOR_RGB2BGR)\n cv2.imwrite("image.jpg",bgr)\nRun Code Online (Sandbox Code Playgroud)\n品质对比
\n我使用这个19.2mb .NEF 图像测试代码,得到以下结果:
\n| 方法 | .jpg 输出尺寸 | 方面 |
|---|---|---|
| 太平洋石油公司 | 9kb | 320x212 |
| CV2 | 14kb | 320x212 |
| rawpy + PIL | 1.4MB | 第4284章 xe2x80x8axc3x97xe2x80x8a2844 |
| 原始码+ CV2 | 2.5MB | 第4284章 xe2x80x8axc3x97xe2x80x8a2844 |
示例2: show .NEF with cv2
import rawpy\nimport cv2\n\nwith rawpy.imread(\'filename.NEF\') as raw:\n rgb = raw.postprocess(use_camera_wb=True)\n bgr = cv2.cvtColor(rgb, cv2.COLOR_RGB2BGR)\n\n cv2.imshow(\'image\', bgr)\n cv2.waitKey(0)\n cv2.destroyAllWindows()\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1089 次 |
| 最近记录: |