本文整理匯總了Python中OpenEXR.InputFile方法的典型用法代碼示例。如果您正苦於以下問題:Python OpenEXR.InputFile方法的具體用法?Python OpenEXR.InputFile怎麽用?Python OpenEXR.InputFile使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類OpenEXR
的用法示例。
在下文中一共展示了OpenEXR.InputFile方法的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。
示例1: __init__
# 需要導入模塊: import OpenEXR [as 別名]
# 或者: from OpenEXR import InputFile [as 別名]
def __init__(self, frame_id, exr_path, use_log=True, blur_size=0, use_scharr=True):
self.frame_id = frame_id
self.exr_img = OpenEXR.InputFile(exr_path)
self.img_raw = extract_grayscale(self.exr_img)
# self.img is actually log(eps+img), blurred
self.img = Frame.preprocess_image(self.img_raw.copy(), use_log=True, blur_size=blur_size)
# self.img_raw is the non-logified image, blurred
self.img_raw = Frame.preprocess_image(self.img_raw, use_log=False, blur_size=blur_size)
# compute the gradient using
# nabla(log(eps+I)) = nabla(I) / (eps+I) (chain rule)
# (hopefully better precision than directly
# computing the numeric gradient of the log img)
eps = 0.001
self.gradient = compute_gradient(self.img_raw, use_scharr)
self.gradient[:,:,0] = self.gradient[:,:,0] / (eps+self.img_raw)
self.gradient[:,:,1] = self.gradient[:,:,1] / (eps+self.img_raw)
self.z = extract_depth(self.exr_img)
示例2: load_hdr_as_tensor
# 需要導入模塊: import OpenEXR [as 別名]
# 或者: from OpenEXR import InputFile [as 別名]
def load_hdr_as_tensor(img_path):
"""Converts OpenEXR image to torch float tensor."""
# Read OpenEXR file
if not OpenEXR.isOpenExrFile(img_path):
raise ValueError(f'Image {img_path} is not a valid OpenEXR file')
src = OpenEXR.InputFile(img_path)
pixel_type = Imath.PixelType(Imath.PixelType.FLOAT)
dw = src.header()['dataWindow']
size = (dw.max.x - dw.min.x + 1, dw.max.y - dw.min.y + 1)
# Read into tensor
tensor = torch.zeros((3, size[1], size[0]))
for i, c in enumerate('RGB'):
rgb32f = np.fromstring(src.channel(c, pixel_type), dtype=np.float32)
tensor[i, :, :] = torch.from_numpy(rgb32f.reshape(size[1], size[0]))
return tensor
示例3: exr_to_png
# 需要導入模塊: import OpenEXR [as 別名]
# 或者: from OpenEXR import InputFile [as 別名]
def exr_to_png(exr_path):
depth_path = exr_path.replace('.png0001.exr', '.png')
exr_image = OpenEXR.InputFile(exr_path)
dw = exr_image.header()['dataWindow']
(width, height) = (dw.max.x - dw.min.x + 1, dw.max.y - dw.min.y + 1)
def read_exr(s, width, height):
mat = np.fromstring(s, dtype=np.float32)
mat = mat.reshape(height, width)
return mat
dmap, _, _ = [read_exr(s, width, height) for s in exr_image.channels('BGR', Imath.PixelType(Imath.PixelType.FLOAT))]
dmap = Image.fromarray((dmap != 1).astype(np.int32))
dmap.save(depth_path)
exr_image.close()
os.system('rm {}'.format(exr_path))
示例4: check_exr
# 需要導入模塊: import OpenEXR [as 別名]
# 或者: from OpenEXR import InputFile [as 別名]
def check_exr(exr_files, channel_names=['R', 'G', 'B']):
"""Check that exr_files (a list of EXR file(s)) have the requested channels
and have the same data window size. Return image width and height.
"""
if not list(channel_names):
raise ValueError("channel_names is empty")
if isinstance(exr_files, OpenEXR.InputFile): # single exr file
exr_files = [exr_files]
elif not isinstance(exr_files, list):
raise TypeError("type(exr_files): {}, should be str or list".format(type(exr_files)))
# Check data window size
data_windows = [str(exr.header()['dataWindow']) for exr in exr_files]
if any(dw != data_windows[0] for dw in data_windows):
raise ValueError("input and groundtruth .exr images have different size")
# Check channel to read are present in given exr file(s)
channels_headers = [exr.header()['channels'] for exr in exr_files]
for channels in channels_headers:
if any(c not in list(channels.keys()) for c in channel_names):
raise ValueError("Try to read channels {} of an exr image with channels {}"
.format(channel_names, list(channels.keys())))
# Compute the size
dw = exr_files[0].header()['dataWindow']
width = dw.max.x - dw.min.x + 1
height = dw.max.y - dw.min.y + 1
return width, height
示例5: read_crop_exr_pair
# 需要導入模塊: import OpenEXR [as 別名]
# 或者: from OpenEXR import InputFile [as 別名]
def read_crop_exr_pair(exr_path_in, exr_path_gt, crop_size=256, channel_names=['R', 'G', 'B']):
"""Read requested channels of input and groundtruth .exr image paths
and return the same random crop of both
"""
# Open the input file
exr_file_in = OpenEXR.InputFile(exr_path_in)
exr_file_gt = OpenEXR.InputFile(exr_path_gt)
width, height = check_exr([exr_file_in, exr_file_gt], channel_names)
# Check exr image width and height >= crop_size
if height < crop_size or width < crop_size:
raise ValueError("Input images size should be superior or equal to crop_size: {} < ({},{})"
.format((width, height), crop_size, crop_size))
# Get random crop value
randw = np.random.randint(0, width-crop_size) if width-crop_size > 0 else 0
randh = np.random.randint(0, height-crop_size) if height-crop_size > 0 else 0
# Get the crop of input and groundtruth .exr images
exr_crop_in = read_crop_exr(exr_file_in, (width, height), randw, randh, crop_size, channel_names)
exr_crop_gt = read_crop_exr(exr_file_gt, (width, height), randw, randh, crop_size, channel_names)
return [exr_crop_in, exr_crop_gt]
示例6: test_reading_unknown_exr_type_fails
# 需要導入模塊: import OpenEXR [as 別名]
# 或者: from OpenEXR import InputFile [as 別名]
def test_reading_unknown_exr_type_fails(self):
image, channels = _MakeTestImage(3, np.float16)
with tempfile.NamedTemporaryFile() as temp:
exr.write_exr(temp.name, image, channels)
exr_file = OpenEXR.InputFile(temp.name)
# Deliberately break the R channel header info. A mock InputFile is
# required to override the header() method.
header_dict = exr_file.header()
header_dict['channels']['R'].type.v = -1 # Any bad value will do.
make_mock_exr = collections.namedtuple('MockExr', ['header', 'channel'])
mock_broken_exr = make_mock_exr(lambda: header_dict, exr_file.channel)
with self.assertRaisesRegexp(RuntimeError, 'Unknown EXR channel type'):
_ = exr.channels_to_ndarray(mock_broken_exr, ['R', 'G', 'B'])
示例7: channels_to_ndarray
# 需要導入模塊: import OpenEXR [as 別名]
# 或者: from OpenEXR import InputFile [as 別名]
def channels_to_ndarray(exr, channel_names):
"""Copies channels from an OpenEXR.InputFile into a numpy array.
If the EXR image is of size (width, height), the result will be a numpy array
of shape (height, width, len(channel_names)), where the last dimension holds
the channels in the order they were specified in channel_names. The requested
channels must all have the same datatype.
Args:
exr: An OpenEXR.InputFile that is already open.
channel_names: A list of strings naming the channels to read.
Returns:
A numpy ndarray.
Raises:
ValueError: If the channels have different datatypes.
RuntimeError: If a channel has an unknown type.
"""
channels_header = exr.header()['channels']
window = exr.header()['dataWindow']
width = window.max.x - window.min.x + 1
height = window.max.y - window.min.y + 1
def read_channel(channel):
"""Reads a single channel from the EXR."""
channel_type = channels_header[channel].type
try:
numpy_type = _exr_to_np[channel_type.v]
except KeyError:
raise RuntimeError('Unknown EXR channel type: %s' % str(channel_type))
flat_buffer = np.frombuffer(exr.channel(channel), numpy_type)
return np.reshape(flat_buffer, [height, width])
channels = [read_channel(c) for c in channel_names]
if any([channels[0].dtype != c.dtype for c in channels[1:]]):
raise ValueError('Channels have mixed datatypes: %s' %
', '.join([str(c.dtype) for c in channels]))
# Stack the arrays so that the channels dimension is the last (fastest
# changing) dimension.
return np.stack(channels, axis=-1)
示例8: read_exr
# 需要導入模塊: import OpenEXR [as 別名]
# 或者: from OpenEXR import InputFile [as 別名]
def read_exr(filename, channel_names=None):
"""Opens an EXR file and copies the requested channels into an ndarray.
The Python OpenEXR wrapper uses a dictionary for the channel header, so the
ordering of the channels in the underlying file is lost. If channel_names is
not passed, this function orders the output channels with any present RGBA
channels first, followed by the remaining channels in alphabetical order.
By convention, RGBA channels are named 'R', 'G', 'B', 'A', so this function
looks for those strings.
Args:
filename: The name of the EXR file.
channel_names: A list of strings naming the channels to read. If None, all
channels will be read.
Returns:
A numpy array containing the image data, and a list of the corresponding
channel names.
"""
exr = OpenEXR.InputFile(filename)
if channel_names is None:
remaining_channel_names = list(exr.header()['channels'].keys())
conventional_rgba_names = ['R', 'G', 'B', 'A']
present_rgba_names = []
# Pulls out any present RGBA names in RGBA order.
for name in conventional_rgba_names:
if name in remaining_channel_names:
present_rgba_names.append(name)
remaining_channel_names.remove(name)
channel_names = present_rgba_names + sorted(remaining_channel_names)
return channels_to_ndarray(exr, channel_names), channel_names
示例9: readEXR
# 需要導入模塊: import OpenEXR [as 別名]
# 或者: from OpenEXR import InputFile [as 別名]
def readEXR(fname,RESOLUTION):
channel_list = ["B","G","R"]
file = OpenEXR.InputFile(fname)
dw = file.header()["dataWindow"]
height,width = RESOLUTION,RESOLUTION
FLOAT = Imath.PixelType(Imath.PixelType.FLOAT)
vectors = [np.array(array.array("f",file.channel(c,FLOAT))) for c in channel_list]
depth = vectors[0].reshape([height,width])
return depth
示例10: open
# 需要導入模塊: import OpenEXR [as 別名]
# 或者: from OpenEXR import InputFile [as 別名]
def open(filename):
# Check if the file is an EXR file
if not OpenEXR.isOpenExrFile(filename):
raise Exception("File '%s' is not an EXR file." % filename)
# Return an `InputFile`
return InputFile(OpenEXR.InputFile(filename), filename)
示例11: parser_exr
# 需要導入模塊: import OpenEXR [as 別名]
# 或者: from OpenEXR import InputFile [as 別名]
def parser_exr(exr_path):
file = OpenEXR.InputFile(exr_path)
header = file.header()
h, w = header["displayWindow"].max.y + 1, header["displayWindow"].max.x + 1
exr = ExrDict()
for key in header["channels"]:
assert header["channels"][key].type.__str__() == "FLOAT"
exr[key] = np.fromstring(file.channel(key), dtype=np.float32).reshape(h, w)
file.close()
return exr
示例12: read_exr
# 需要導入模塊: import OpenEXR [as 別名]
# 或者: from OpenEXR import InputFile [as 別名]
def read_exr(exr_path, height, width):
file = OpenEXR.InputFile(exr_path)
depth_arr = array.array('f', file.channel('R', Imath.PixelType(Imath.PixelType.FLOAT)))
depth = np.array(depth_arr).reshape((height, width))
depth[depth < 0] = 0
depth[np.isinf(depth)] = 0
return depth
示例13: read_exr
# 需要導入模塊: import OpenEXR [as 別名]
# 或者: from OpenEXR import InputFile [as 別名]
def read_exr(exr_path, channel_names=['R', 'G', 'B']):
"""Read requested channels of an exr and return them in a numpy array
"""
# Open and check the input file
exr_file = OpenEXR.InputFile(exr_path)
width, height = check_exr(exr_file, channel_names)
# Copy channels from an exr file into a numpy array
exr_numpy = [np.frombuffer(exr_file.channel(c, EXR_PIX_TYPE), dtype=EXR_NP_TYPE)
.reshape(height, width) for c in channel_names]
exr_numpy = np.stack(exr_numpy, axis=-1)
return exr_numpy
示例14: open_multilayer_exr_layers
# 需要導入模塊: import OpenEXR [as 別名]
# 或者: from OpenEXR import InputFile [as 別名]
def open_multilayer_exr_layers(inputfile, layers):
"""
Load a list of images, each corresponding to a layer of an OpenEXR file.
Note that "layer" does not correspond to a single color channel, like "R",
but rather, a group of 3 color channels.
:param inputfile: string filename
:param layers: list of string layer names
"""
f = OpenEXR.InputFile(inputfile)
header = f.header()
dw = header['dataWindow']
cols, rows = dw.max.x - dw.min.x + 1, dw.max.y - dw.min.y + 1
# load channels
FLOAT = Imath.PixelType(Imath.PixelType.FLOAT)
images = []
for layer in layers:
channels = LAYER_CHANNELS[layer]
image = np.empty((rows, cols, 3), dtype=np.float32)
for (i, c) in enumerate(channels):
data = f.channel(c, FLOAT)
image[:, :, i] = np.fromstring(data, dtype=np.float32) \
.reshape((rows, cols))
images.append(image)
return images
#def denoise_indirect_image(img):
#denoised = np.empty_like(img)
#for c in xrange(3):
#denoised[:, :, c] = median_filter(
#img[:, :, c],
#mode='reflect',
#footprint=[
#[0, 1, 0],
#[1, 1, 1],
#[0, 1, 0],
#]
#)
#return denoised
示例15: rigid_flow
# 需要導入模塊: import OpenEXR [as 別名]
# 或者: from OpenEXR import InputFile [as 別名]
def rigid_flow(self):
V, Omega, dt = self.compute_velocity_from_msg(self.pose_data[200,:], self.pose_data[204,:])
# print(self.depth_data[1][1])
depth_image0 = OpenEXR.InputFile(self.depth_data[200][1])
dw0 = depth_image0.header()['dataWindow']
size0 = (dw0.max.x - dw0.min.x + 1, dw0.max.y - dw0.min.y + 1)
pt0 = Imath.PixelType(Imath.PixelType.FLOAT)
depth0 = np.fromstring(depth_image0.channel("Z"), dtype=np.float32)
depth0.shape = (size0[1], size0[0]) # Numpy arrays are (row, col)
depth_image1 = OpenEXR.InputFile(self.depth_data[204][1])
dw1 = depth_image1.header()['dataWindow']
size1 = (dw1.max.x - dw1.min.x + 1, dw1.max.y - dw1.min.y + 1)
pt1 = Imath.PixelType(Imath.PixelType.FLOAT)
depth1 = np.fromstring(depth_image1.channel("Z"), dtype=np.float32)
depth1.shape = (size1[1], size1[0]) # Numpy arrays are (row, col)
depth = (depth0+depth1)/2
flow_x_dist, flow_y_dist = self.compute_flow_single_frame(V,
Omega,
depth,
dt)
print(flow_x_dist, flow_y_dist)
flow = np.dstack((flow_x_dist, flow_y_dist))
flow = np.float32(flow)
# verfication
img1 = cv2.imread(self.image_data[200][1],1)
# img1 = np.float32(img1)
print(img1.shape)
img2 = cv2.imread(self.image_data[204][1], 1)
# img2 = np.float32(img2)
print(img1.shape, flow.dtype)
warpped_img1 = self.warp_image(img2, flow)
# warpped_img1 = self.warp_flow(img2, flow)
cv2.imshow('warpped_img1', cv2.subtract(img1, warpped_img1))
first_img = self.colorize_image(flow_x_dist, flow_y_dist)
cv2.imshow('image',first_img)
cv2.waitKey(0)