Jacob W. Dallas
Jacob W. Dallas

Reputation: 381

Raw Images from rawpy darker than their thumbnails

I'm wanting to convert '.NEF' to '.png' using the rawpy, imageio and opencv libraries in Python. I've tried a variety of flags in rawpy to produce the same image that I see when I just open the NEF, but all of the images that output are extremely dark. What am I doing wrong?

My current version of the code is:

import rawpy
import imageio
from os.path import *
import os
import cv2


def nef2png(inputNEFPath):
    parent, filename = split(inputNEFPath)
    name, _ = splitext(filename)
    pngName = str(name+'.png')
    tempFileName = str('temp%s.tiff' % (name))
    with rawpy.imread(inputNEFPath) as raw:
        rgb = raw.postprocess(gamma=(2.222, 4.5),
                              no_auto_bright=True,
                              output_bps=16)
    imageio.imsave(join(parent, tempFileName), rgb)
    image = cv2.imread(join(parent, tempFileName), cv2.IMREAD_UNCHANGED)
    cv2.imwrite(join(parent, pngName), image)
    os.remove(join(parent, tempFileName))

I'm hoping to get to get this result: comparison https://i.sstatic.net/L62mc.jpg

But I keep getting dark outputs like this: comparison https://i.sstatic.net/CBjGH.jpg

For the actual file NEF, I uploaded them to my google drive if you want to mess with it: https://drive.google.com/drive/folders/1DVSPXk2Mbj8jpAU2EeZfK8d2HZM9taiH?usp=sharing

Upvotes: 1

Views: 1003

Answers (1)

Tomi Aarnio
Tomi Aarnio

Reputation: 2517

You're not doing anything wrong, it's just that the thumbnail was generated by Nikon's proprietary in-camera image processing pipeline. It's going to be hard to get the exact same visual output from an open source tool with an entirely different set of algorithms.

You can make the image brighter by setting no_auto_bright=False. If you're not happy with the default brightening, you can play with the auto_bright_thr parameter (see documentation).

Upvotes: 2

Related Questions