在python中迭代图像的所有像素的最快方法

che*_*ens 4 python numpy scipy scikit-learn scikit-image

我已经将图像作为数组读取:

import numpy as np
from scipy import misc
face1=misc.imread('face1.jpg')
Run Code Online (Sandbox Code Playgroud)

face1尺寸是 (288, 352, 3)

我需要迭代每个像素并填充y训练集中的列我采取了以下方法:

Y_training = np.zeros([1,1],dtype=np.uint8)

for i in range(0, face1.shape[0]): # We go over rows number 
    for j in range(0, face1.shape[1]): # we go over columns number
        if np.array_equiv(face1[i,j],[255,255,255]):
           Y_training=np.vstack(([0], Y_training))#0 if blank
        else:
           Y_training=np.vstack(([1], Y_training))

b = len(Y_training)-1
Y_training = Y_training[:b]
np.shape(Y_training)`
Run Code Online (Sandbox Code Playgroud)

Wall time: 2.57 s

因为我需要在大约2000个图像的上面的过程中做任何更快的方法,我们可以减少运行时间到毫秒或naonseconds

Div*_*kar 7

您可以使用broadcasting对白色像素执行广播比较:[255, 255, 255]ALL减少每一行,.all(axis=-1)最后转换为intdtype.这将为我们提供退出循环后您将拥有的输出.

因此,一个实施将是 -

(~((face1 == [255,255,255]).all(-1).ravel())).astype(int)
Run Code Online (Sandbox Code Playgroud)

或者,更紧凑的版本 -

1-(face1 == [255,255,255]).all(-1).ravel()
Run Code Online (Sandbox Code Playgroud)