nvImageCodec 批量处理示例#
[1]:
import os
import os.path
from matplotlib import pyplot as plt
from nvidia import nvimgcodec
设置资源文件夹
[2]:
resources_dir = os.getenv("PYNVIMGCODEC_EXAMPLES_RESOURCES_DIR", "../assets/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)
创建解码器
[4]:
dec = nvimgcodec.Decoder()
解码数据
[5]:
image_list = dec.decode(data_list)
解码文件
[6]:
image_list = dec.read(image_paths)
显示解码后的图像
[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")
将数据写入文件
[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
在一个写入函数中编码图像并写入文件
[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")
如果我们跳过编解码器参数,文件将根据文件扩展名推断出的编解码器进行编码
[12]:
enc.write(out_file_names, image_list)
解码目录中的所有文件
[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)




