![](/img/trans.png)
[英]What's the most efficient way to pause a CPU-intensive python program?
[英]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.