Module qimview.image_readers.libraw_reader
Expand source code
try:
import rawpy
except:
has_rawpy = False
else:
has_rawpy = True
import math
import numpy as np
from qimview.utils.viewer_image import ViewerImage, ImageFormat
from io import BytesIO
def read_libraw(image_filename, image_buffer, read_size='full', use_RGB=True, verbose=False):
if image_buffer:
raw = rawpy.imread(BytesIO(image_buffer))
else:
raw = rawpy.imread(image_filename)
height, width = raw.raw_image.shape
print(f"height, width {(height, width)}")
# Transform Bayer image
im1 = np.empty((height >> 1, width >> 1, 4), dtype=raw.raw_image.dtype)
bayer_desc = raw.color_desc.decode('utf-8')
bayer_pattern = raw.raw_pattern
# not perfect, we may switch Gr and Gb
bayer_desc = bayer_desc.replace('G', 'g', 1)
# Detect the green channels?
channel_pos = {'R': 0, 'g': 1, 'G': 2, 'B': 3}
for i in range(2):
for j in range(2):
print("str(bayer_desc[bayer_pattern[i,j]]) {}".format(
str(bayer_desc[bayer_pattern[i, j]])))
pos = channel_pos[str(bayer_desc[bayer_pattern[i, j]])]
im1[:, :, pos] = raw.raw_image[i::2, j::2]
prec = math.ceil(math.log2(raw.white_level+1))
viewer_image = ViewerImage(im1, precision=prec, downscale=1, channels=ImageFormat.CH_RGGB)
print("viewer_image channels {}".format(viewer_image.channels))
return viewer_image
def libraw_supported_formats():
# Need to find the complete list of supported formats
return [".ARW", ".GPR", ".DNG" ]
Functions
def libraw_supported_formats()-
Expand source code
def libraw_supported_formats(): # Need to find the complete list of supported formats return [".ARW", ".GPR", ".DNG" ] def read_libraw(image_filename, image_buffer, read_size='full', use_RGB=True, verbose=False)-
Expand source code
def read_libraw(image_filename, image_buffer, read_size='full', use_RGB=True, verbose=False): if image_buffer: raw = rawpy.imread(BytesIO(image_buffer)) else: raw = rawpy.imread(image_filename) height, width = raw.raw_image.shape print(f"height, width {(height, width)}") # Transform Bayer image im1 = np.empty((height >> 1, width >> 1, 4), dtype=raw.raw_image.dtype) bayer_desc = raw.color_desc.decode('utf-8') bayer_pattern = raw.raw_pattern # not perfect, we may switch Gr and Gb bayer_desc = bayer_desc.replace('G', 'g', 1) # Detect the green channels? channel_pos = {'R': 0, 'g': 1, 'G': 2, 'B': 3} for i in range(2): for j in range(2): print("str(bayer_desc[bayer_pattern[i,j]]) {}".format( str(bayer_desc[bayer_pattern[i, j]]))) pos = channel_pos[str(bayer_desc[bayer_pattern[i, j]])] im1[:, :, pos] = raw.raw_image[i::2, j::2] prec = math.ceil(math.log2(raw.white_level+1)) viewer_image = ViewerImage(im1, precision=prec, downscale=1, channels=ImageFormat.CH_RGGB) print("viewer_image channels {}".format(viewer_image.channels)) return viewer_image