欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python中?OpenCV和Pillow處理圖像操作及時(shí)間對(duì)比

 更新時(shí)間:2022年09月28日 11:29:08   作者:Liekkas?Kono  
這篇文章主要介紹了python中OpenCV和Pillow處理圖像操作及時(shí)間對(duì)比,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

引言

  • 最近再做圖像處理相關(guān)的操作的時(shí)間優(yōu)化,用到了OpenCV和Pillow兩個(gè)庫,兩個(gè)庫各有優(yōu)缺點(diǎn)。各位小伙伴需要按照自己需求選用。
  • 本篇博客做了簡單整理,對(duì)常用操作做了對(duì)比整理,以及給出具體運(yùn)行時(shí)間說明。

OpenCV和Pillow的優(yōu)缺點(diǎn)對(duì)比

優(yōu)點(diǎn)缺點(diǎn)
OpenCV由C和C++編寫,跨平臺(tái),有著多個(gè)語言的實(shí)現(xiàn),部署比較方便對(duì)顯示中文支持較差、Python下常用函數(shù)不是太好看-_-!
Pillow常用函數(shù)操作封裝較好,對(duì)顯示中文字體有著很好的支持處理時(shí)間較慢

測試環(huán)境:

  • OS: Windows10
  • Python: 3.7.13
  • OpenCV: 4.6.0.66
  • numpy: 1.21.6
  • Pillow: 9.2.0

測試圖像 :

讀取圖像的通道順序區(qū)別:

  • OpenCV讀取圖像,通道順序是:BGR
  • Pillow讀取圖像,通道順序是:RGB

獲得圖像shape區(qū)別:

  • OpenCV.shape(height, width, channel
  • Pillow.size(width, height)

示例代碼:

import cv2
from PIL import Image

img_path = 'images/test_demo.png'

cv_img = cv2.imread(img_path)
height, width, channel = cv_img.shape

pillow_img = Image.open(img_path)
width, height = pillow_img.size

讀寫圖像

讀圖像

示例代碼:

import cv2
from PIL import Image
import numpy as np

png_img_path = 'images/test_demo.png'
jpg_img_path = 'images/test_demo.jpg'

# 由jupyter notebook中魔法命令:%%timeit測得
# 169 ms ± 1.68 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
cv_img = cv2.imread(png_img_path)    

# 52.9 ms ± 541 μs per loop (mean ± std. dev. of 7 runs, 10 loops each)
cv_img = cv2.imread(jpg_img_path)

# 300 ms ± 8.45 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
pillow_img = Image.open(png_img_path)
pillow_img = np.array(pillow_img)

# 47.4 ms ± 1.87 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
pillow_img = Image.open(jpg_img_path)
pillow_img = np.array(pillow_img)

小結(jié):

  • 讀取圖像格式為PNG,且都轉(zhuǎn)為np.array格式,優(yōu)先選擇OpenCV。
  • 讀取圖像格式為JPG,且都轉(zhuǎn)為np.array格式,速度相差不大,按需選取即可。

寫圖像

示例代碼:

save_png_path = 'output/result.png'
save_jpg_path = 'output/result.jpg'

cv_img = cv2.imread(png_img_path)
pillow_img = Image.open(png_img_path)

# 346 ms ± 11.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
cv2.imwrite(save_png_path, cv_img)

# 158 ms ± 4.03 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
cv2.imwrite(save_jpg_path, cv_img)

# 2.81 s ± 38.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
pillow_img.save(save_png_path)

# 51.3 ms ± 1.72 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
t = pillow_img.convert('RGB') 
t.save(save_jpg_path)

小結(jié):

  • 寫圖像格式為PNG,優(yōu)先選擇OpenCV。
  • 寫圖像格式為JPG,選擇Pillow。

縮放圖像

示例代碼:

png_img_path = 'images/test_demo.png'

resize_shape = (2048, 2048)
cv_img = cv2.imread(png_img_path)
pillow_img = Image.open(png_img_path)

# 6.93 ms ± 173 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
cv2.resize(cv_img, resize_shape, interpolation=cv2.INTER_CUBIC)

# 151 ms ± 2.21 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
pillow_img.resize(resize_shape, resample=Image.Resampling.BICUBIC)

小結(jié): OpenCV速度完勝Pillow

旋轉(zhuǎn)圖像

示例代碼:

angle = 38

# 23.6 ms ± 732 μs per loop (mean ± std. dev. of 7 runs, 10 loops each)
h, w = cv_img.shape[:2]
M = cv2.getRotationMatrix2D((w / 2, h / 2), angle, 1)
rot_img = cv2.warpAffine(cv_img, M, (w, h))

# 82.1 ms ± 2.37 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
rot_img_pillow = np.array(pillow_img.rotate(angle))

小結(jié):OpenCV速度完勝Pillow 

總結(jié):

  • 如果可以選擇,優(yōu)先選擇OpenCV處理圖像
  • Pillow可以用來處理顯示中文相關(guān)問題

到此這篇關(guān)于python中 OpenCV和Pillow處理圖像操作及時(shí)間對(duì)比的文章就介紹到這了,更多相關(guān)python OpenCV處理圖像 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Django 聚合查詢及使用步驟

    Django 聚合查詢及使用步驟

    本文詳細(xì)介紹了Django中聚合查詢的使用方法和步驟,包括aggregate()和annotate()兩種聚合查詢方式,以及F()和Q()查詢的使用場景,文中通過具體代碼示例解釋了如何在Django項(xiàng)目中實(shí)現(xiàn)數(shù)據(jù)聚合,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • Python使用configparser讀取ini配置文件

    Python使用configparser讀取ini配置文件

    這篇文章主要介紹了Python使用configparser讀取ini配置文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Tensorflow 訓(xùn)練自己的數(shù)據(jù)集將數(shù)據(jù)直接導(dǎo)入到內(nèi)存

    Tensorflow 訓(xùn)練自己的數(shù)據(jù)集將數(shù)據(jù)直接導(dǎo)入到內(nèi)存

    這篇文章主要介紹了Tensorflow 訓(xùn)練自己的數(shù)據(jù)集將數(shù)據(jù)直接導(dǎo)入到內(nèi)存,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • python 實(shí)現(xiàn)生成均勻分布的點(diǎn)

    python 實(shí)現(xiàn)生成均勻分布的點(diǎn)

    今天小編就為大家分享一篇python 實(shí)現(xiàn)生成均勻分布的點(diǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python multiprocessing 進(jìn)程間通信方式實(shí)現(xiàn)

    Python multiprocessing 進(jìn)程間通信方式實(shí)現(xiàn)

    本文主要介紹了Python multiprocessing 進(jìn)程間通信方式實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • pytorch 如何自定義卷積核權(quán)值參數(shù)

    pytorch 如何自定義卷積核權(quán)值參數(shù)

    這篇文章主要介紹了pytorch 自定義卷積核權(quán)值參數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python RuntimeError: thread.__init__() not called解決方法

    Python RuntimeError: thread.__init__() not called解決方法

    這篇文章主要介紹了Python RuntimeError: thread.__init__() not called解決方法,需要的朋友可以參考下
    2015-04-04
  • PyQt5 QThread倒計(jì)時(shí)功能的實(shí)現(xiàn)代碼

    PyQt5 QThread倒計(jì)時(shí)功能的實(shí)現(xiàn)代碼

    這篇文章主要介紹了PyQt5 QThread倒計(jì)時(shí)功能的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Python生成驗(yàn)證碼實(shí)例

    Python生成驗(yàn)證碼實(shí)例

    這篇文章主要介紹了Python生成驗(yàn)證碼的方法,具有很好的實(shí)用價(jià)值,代碼結(jié)構(gòu)清晰易懂,需要的朋友可以參考下
    2014-08-08
  • Python word文本自動(dòng)化操作實(shí)現(xiàn)方法解析

    Python word文本自動(dòng)化操作實(shí)現(xiàn)方法解析

    這篇文章主要介紹了Python word文本自動(dòng)化操作實(shí)現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11

最新評(píng)論