nvImageCodec batch processing examples#
[1]:
import os
import os.path
from matplotlib import pyplot as plt
from nvidia import nvimgcodec
Setting resource folder
[2]:
resources_dir = os.getenv("PYNVIMGCODEC_EXAMPLES_RESOURCES_DIR", "../assets/images/")
Load images
[3]:
image_paths = [resources_dir + "cat-1046544_640.jp2", resources_dir + "tabby_tiger_cat.jpg",
resources_dir + "Weimaraner.bmp"]
batch_size = len(image_paths)
data_list = []
for p in image_paths:
with open(p, 'rb') as in_file:
data = in_file.read()
data_list.append(data)
Create decoder
[4]:
dec = nvimgcodec.Decoder()
Decode data
[5]:
image_list = dec.decode(data_list)
Decode files
[6]:
image_list = dec.read(image_paths)
Show decoded images
[7]:
for img in image_list:
print(img.__cuda_array_interface__)
plt.figure()
plt.imshow(img.cpu())
{'shape': (475, 640, 3), 'strides': None, 'typestr': '|u1', 'data': (12922479616, False), 'version': 3, 'stream': 1}
{'shape': (720, 720, 3), 'strides': None, 'typestr': '|u1', 'data': (12923392000, False), 'version': 3, 'stream': 1}
{'shape': (720, 720, 3), 'strides': None, 'typestr': '|u1', 'data': (12924947456, False), 'version': 3, 'stream': 1}



[8]:
enc = nvimgcodec.Encoder()
[9]:
encoded_imgs = enc.encode(image_list, ".jpg")
Write data to file
[10]:
i = 0
for enc_img in encoded_imgs:
out_file_name = os.path.splitext(os.path.basename(image_paths[i]))[0]+ "_out.jpg"
with open(out_file_name, "wb") as out_file:
out_file.write(enc_img)
i+=1
Encode and write images to file in one write function
[11]:
out_file_names = [os.path.splitext(os.path.basename(p))[0] + "_out.jpg" for p in image_paths]
enc.write(out_file_names, image_list, ".jpg")
[11]:
['cat-1046544_640_out.jpg', 'tabby_tiger_cat_out.jpg', 'Weimaraner_out.jpg']
if we skip codec argument, files will be encoded to codec deducted based on file extension
[12]:
enc.write(out_file_names, image_list)
[12]:
['cat-1046544_640_out.jpg', 'tabby_tiger_cat_out.jpg', 'Weimaraner_out.jpg']
Decode all files in directory
[13]:
import glob
import cupy as cp
image_paths = glob.glob(resources_dir + '*.*')
batch_size = 5
file_name_batches = [image_paths[i: i + batch_size] for i in range(0, len(image_paths), batch_size)]
for file_name_batch in file_name_batches:
#Alternatively, load data from each file and pass data_list to decode
"""data_list = []
for path in file_name_batch:
with open(path, "rb") as in_file:
data_list.append(in_file.read())
image_list = dec.decode(data_list)"""
image_list = dec.read(file_name_batch)
for img in image_list:
h_img = img.cpu()
plt.figure()
plt.imshow(h_img)




