<p>在Ubuntu 16.04lts(xeone52670ssd)上用Python 3.5运行1000个RGBA PNG图像(224x 256像素),测试了三种建议的方法的速度。</p>
<p><strong>平均运行时间</strong></p>
<p><code>pil :</code>1.037秒</p>
<p><code>scipy:</code>1.040秒</p>
<p><code>sk :</code>2.120秒</p>
<p>PIL和SciPy给出了相同的<code>numpy</code>数组(范围从0到255)。skipage给出从0到1的数组。此外,颜色的转换略有不同,请参见<a href="http://www.vision.caltech.edu/visipedia/CUB-200.html" rel="noreferrer">CUB-200 dataset.</a>中的示例</p>
<p><code>SkImage:</code><a href="https://i.stack.imgur.com/ZLd5vm.png" rel="noreferrer"><img src="https://i.stack.imgur.com/ZLd5vm.png" alt="SkImage"/></a></p>
<p><code>PIL :</code><a href="https://i.stack.imgur.com/eQ4KIm.png" rel="noreferrer"><img src="https://i.stack.imgur.com/eQ4KIm.png" alt="PIL"/></a></p>
<p><code>SciPy :</code><a href="https://i.stack.imgur.com/DTjVSm.png" rel="noreferrer"><img src="https://i.stack.imgur.com/DTjVSm.png" alt="SciPy"/></a></p>
<p><code>Original:</code><a href="https://i.stack.imgur.com/43cy1m.png" rel="noreferrer"><img src="https://i.stack.imgur.com/43cy1m.png" alt="Original"/></a></p>
<p><code>Diff :</code><a href="https://i.stack.imgur.com/f5fy9m.png" rel="noreferrer"><img src="https://i.stack.imgur.com/f5fy9m.png" alt="enter image description here"/></a></p>
<p><strong>代码</strong></p>
<ol>
<li><p>性能
</p><pre><code>run_times = dict(sk=list(), pil=list(), scipy=list())
for t in range(100):
start_time = time.time()
for i in range(1000):
z = random.choice(filenames_png)
img = skimage.color.rgb2gray(skimage.io.imread(z))
run_times['sk'].append(time.time() - start_time)
<pre><code>start_time = time.time()
for i in range(1000):
z = random.choice(filenames_png)
img = np.array(Image.open(z).convert('L'))
run_times['pil'].append(time.time() - start_time)
start_time = time.time()
for i in range(1000):
z = random.choice(filenames_png)
img = scipy.ndimage.imread(z, mode='L')
run_times['scipy'].append(time.time() - start_time)
</code></pre>
<p>对于k,v在run_times.items()中:
打印('{:5}:{:0.3f}秒'。格式(k,sum(v)/len(v)))
</p></code></pre></li>
<li>输出
<pre><code>z = 'Cardinal_0007_3025810472.jpg'
img1 = skimage.color.rgb2gray(skimage.io.imread(z)) * 255
IPython.display.display(PIL.Image.fromarray(img1).convert('RGB'))
img2 = np.array(Image.open(z).convert('L'))
IPython.display.display(PIL.Image.fromarray(img2))
img3 = scipy.ndimage.imread(z, mode='L')
IPython.display.display(PIL.Image.fromarray(img3))
</code></pre></li>
<li>比较
<pre><code>img_diff = np.ndarray(shape=img1.shape, dtype='float32')
img_diff.fill(128)
img_diff += (img1 - img3)
img_diff -= img_diff.min()
img_diff *= (255/img_diff.max())
IPython.display.display(PIL.Image.fromarray(img_diff).convert('RGB'))
</code></pre></li>
<li>进口
<pre><code>import skimage.color
import skimage.io
import random
import time
from PIL import Image
import numpy as np
import scipy.ndimage
import IPython.display
</code></pre></li>
<li>版本
<pre><code>skimage.<strong>version</strong>
0.13.0
scipy.<strong>version</strong>
0.19.1
np.<strong>version</strong>
1.13.1
</code></pre></li>
</ol>