簡體   English   中英

在Python中調整大圖像大小的CPU效率最高的方法是什么

[英]What is the most CPU efficient way to resize big images in Python

我正在尋找最有效的方法來調整圖像大小。 如果圖像相對較小(例如3000x2000),PIL效果很好,但如果分辨率很大(16000x12000)則處理時間很長。 圖像不必看起來很漂亮我正在調整它們以進行比較以找到帶有nrmse的圖像副本。

from PIL import Image

img1 = Image.open("img1.jpg")
img2 = Image.open("img2.jpg")

print img1.size
print img2.size

# add width to height to see which resolution is bigger
im1s = img1.size[0] + img1.size[1]
im2s = img2.size[0] + img2.size[1]

# if both images are bigger than 3000 pixels make them smaller for comparison
if im1s > 3000 and im2s > 3000:
    print("Width and height of both images is bigger than 3000 pixels resizing them for easier comparison")
    im1_resize = img1.resize((640, 480), Image.ANTIALIAS)
    im2_resize = img2.resize((640, 480), Image.ANTIALIAS)

im1_resize.save('im1r.jpg')
im2_resize.save('im2r.jpg')

您應該在上采樣時傳遞Image.NEAREST參數,即:

im1_resize = img1.resize((640, 480), Image.NEAREST)

這僅在上采樣時采用最接近的像素,因此是最快的上采樣方法。

使用ANTIALIAS ,會對多個像素進行采樣以生成調整大小的圖像,這樣會慢得多。

請注意,您的瓶頸很可能是寫出這些文件,而不是升級。

我有兩個建議。 一個是libvips ,另一個是jpegtran-cffi

由於我沒有進行基准測試,所以我只記下每個庫的要點。

Libvips支持多種圖像格式,並通過智能決策獲得速度,允許多線程和使用此處解釋的快速cpu指令和基准測試 python版本也在這里

Jpegtran只適用於jpegs。 他們通過直接操作jpeg數據來獲得速度,而無需重新壓縮主要自述文件中解釋的最終輸出以及基准測試。

我的猜測是,jpegtran是單線程的,當它可以在多處理環境中運行時,它會勝過libvip。 我們唯一的比較是他們都比較的枕頭基准。 Libvips的表現優於6倍,jpegtran可能優於2倍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM