(含源码)利用GPU加速Python图像缩放

利用GPU加速Python图像缩放

NVIDIA 视觉编程接口 (VPI: Vision Programming Interface) 是 NVIDIA 的计算机视觉和图像处理软件库,使您能够实现在 NVIDIA Jetson 嵌入式设备和独立的GPU 上可用的不同硬件后端上加速的算法。

库中的一些算法包括过滤方法、透视扭曲、时间降噪、直方图均衡、立体视差和镜头失真校正。 VPI 提供易于使用的 Python 绑定以及 C++ API。

除了与 OpenCV 接口外,VPI 还能够与 PyTorch 和其他基于 Python 的库进行互操作。

下面的示例通过首先应用低通滤波器来重新缩放输入图像以避免混叠,然后进行下采样。生成的图像具有输入宽度的一半和输入高度的三分之一。然后将结果保存到磁盘。

输入图像:
在这里插入图片描述
输出图像:
在这里插入图片描述

 import sys
 import vpi
 import numpy as np
 from PIL import Image
 from argparse import ArgumentParser
  
 # Parse command line arguments
 parser = ArgumentParser()
 parser.add_argument('backend', choices=['cpu','cuda','vic'],
                     help='Backend to be used for processing')
  
 parser.add_argument('input',
                     help='Image to be used as input')
  
 args = parser.parse_args();
  
 if args.backend == 'cpu':
     backend = vpi.Backend.CPU
 elif args.backend == 'cuda':
     backend = vpi.Backend.CUDA
 else:
     assert args.backend == 'vic'
     backend = vpi.Backend.VIC
  
 # Load input into a vpi.Image
 input = vpi.asimage(np.asarray(Image.open(args.input)))
  
 # Using the chosen backend,
 with backend:
     # First convert input to NV12_ER.
     # We're overriding the default backend with CUDA.
     temp = input.convert(vpi.Format.NV12_ER, backend=vpi.Backend.CUDA)
  
     # Rescale the image using the chosen backend
     temp = temp.rescale((input.width//2, input.height//3))
  
     # Convert result back to input's format
     output = temp.convert(input.format, backend=vpi.Backend.CUDA)
  
 # Save result to disk
 Image.fromarray(output.cpu()).save('scaled_python'+str(sys.version_info[0])+'_'+args.backend+'.png')

猜你喜欢

转载自blog.csdn.net/kunhe0512/article/details/125352142