Advertisement

python几种读取及显示图片的方式,及各种方式的读取时间

阅读量:

python几种读取及显示图片的方式,及各种方式的读取、显示、保存时间

  • 摘要
  • 测试代码
  • 结果:

摘要

主流的读取图片并显示的Python图像库如下:

  1. opencv
  2. PIL(pillow)
  3. matplotlib.image
  4. skimage

上述四种库的读取和显示方式如下述代码所述。下述代码中测试了不同库对同一张图片的读取以及显示时间。注意opencv读取图片格式为BGR,因此需要进行颜色转换。Pillow库读取图片形式不是numpy.array形式,因此需要先进行转换。上述两个操作均算成读取时间。

测试代码

复制代码
    import os
    import cv2
    from os.path import join as pjoin
    import matplotlib.pyplot as plt
    import imageio
    from PIL import Image
    import time
    import skimage.io as io
    import numpy as np
    
    # 示例图片
    imgPath = r'D:\Data\ISIC\ISIC2018_Task1-2_Training_Input\ISIC_0000000.jpg'
    savePath_plt = r'D:\Data\test_plt.png'
    savePath_pil = r'D:\Data\test_pil.png'
    savePath_sk = r'D:\Data\test_sk.png'
    savePath_cv = r'D:\Data\test_cv.png'
    # # opencv 读取及显示时间
    time_cv_load_start = time.time()
    img_cv = cv2.cvtColor(cv2.imread(imgPath), cv2.COLOR_BGR2RGB)
    time_cv_load_end = time.time()
    
    time_cv_show_start = time.time()
    cv2.imshow('cv2', img_cv)
    time_cv_show_end = time.time()
    cv2.waitKey(4)
    
    time_cv_save_start = time.time()
    cv2.imwrite(savePath_cv, cv2.cvtColor(img_cv, cv2.COLOR_RGB2BGR))
    time_cv_save_end = time.time()
    plt.pause(1)
    
    # matplotlib 读取及显示时间
    plt.figure(0)
    time_plt_load_start = time.time()
    img_plt = plt.imread(imgPath)
    time_plt_load_end = time.time()
    
    time_plt_show_start = time.time()
    plt.imshow(img_plt)
    time_plt_show_end = time.time()
    plt.pause(1)
    
    time_plt_save_start = time.time()
    plt.imsave(savePath_plt, img_plt)
    time_plt_save_end = time.time()
    plt.pause(1)
    
    # pillow 读取及显示时间
    time_pil_load_start = time.time()
    img_pil = Image.open(imgPath)
    img_pil_np = np.array(img_pil)
    time_pil_load_end = time.time()
    
    time_pil_show_start = time.time()
    img_pil = Image.fromarray(img_pil_np)
    img_pil.save(savePath_pil)
    time_pil_show_end = time.time()
    
    time_pil_save_start = time.time()
    img_pil.show()
    time_pil_save_end = time.time()
    
    # skimage 读取及显示
    plt.figure(1)
    time_sk_load_start = time.time()
    img_sk = io.imread(imgPath)
    time_sk_load_end = time.time()
    
    time_sk_show_start = time.time()
    io.imshow(img_sk)
    time_sk_show_end = time.time()
    
    time_sk_save_start = time.time()
    io.imsave(savePath_sk, img_sk)
    time_sk_save_end = time.time()
    
    plt.pause(1)
    print('读取时间, cv:{:.4f}s, plt:{:.4f}s, pil:{:.4f}s, sk:{:.4f}s'.format(time_cv_load_end-time_cv_load_start,
                                                                         time_plt_load_end-time_plt_load_start,
                                                                         time_pil_load_end-time_pil_load_start,
                                                                         time_sk_load_end-time_sk_load_start))
    
    print('显示时间, cv:{:.4f}s, plt:{:.4f}s, pil:{:.4f}s, sk:{:.4f}s'.format(time_cv_show_end-time_cv_show_start,
                                                                         time_plt_show_end-time_plt_show_start,
                                                                         time_pil_show_end-time_pil_show_start,
                                                                         time_sk_show_end-time_sk_show_start))
    
    print('存储时间, cv:{:.4f}s, plt:{:.4f}s, pil:{:.4f}s, sk:{:.4f}s'.format(time_cv_save_end-time_cv_save_start,
                                                                         time_plt_save_end-time_plt_save_start,
                                                                         time_pil_save_end-time_pil_save_start,
                                                                         time_sk_save_end-time_sk_save_start))
    
    
    
    
    
    python
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-19/jD8PC1SUxsibeldg96VzE4RXr0Zk.png)

结果:

windows 下的时间

复制代码
    读取时间, cv:0.0130s, plt:0.0149s, pil:0.0060s, sk:0.0050s
    显示时间, cv:0.0847s, plt:0.0170s, pil:0.1935s, sk:0.0538s
    存储时间, cv:0.0269s, plt:0.2174s, pil:1.7087s, sk:1.1832s
    
    
    python
    
    

linux 下时间

复制代码
    读取时间, cv:0.1349s, plt:0.1500s, pil:0.1695s, sk:0.1607s
    显示时间, cv:0.0000s, plt:0.0840s, pil:2.7047s, sk:0.3634s
    存储时间, cv:0.3056s, plt:3.4132s, pil:0.0009s, sk:7.1833s
    
    
    python
    
    

opencv 在linux远程服务器上显示需要配置,所以没有计算opencv在linux上的显示时间。另外opencv不能读取路径有中文的图片。总的来说windows和linux下需要使用的保存库和读取库不太相同

全部评论 (0)

还没有任何评论哟~