在 python 中迭代图像所有像素的最快方法
fastest way to iterate over all pixels of an image in python
我已经读取了一个图像数组:
import numpy as np
from scipy import misc
face1=misc.imread('face1.jpg')
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)`
Wall time: 2.57 s
因为我需要对大约 2000 张图像进行上述处理,有没有更快的方法可以将 运行 时间减少到毫秒或 naonseconds
您可以使用 broadcasting
对白色像素进行广播比较:[255, 255, 255]
和 ALL
使用 .all(axis=-1)
减少每一行,最后转换为 int
数据类型。这将为我们提供退出循环后的输出。
因此,一种实现方式是 -
(~((face1 == [255,255,255]).all(-1).ravel())).astype(int)
或者,更紧凑的版本 -
1-(face1 == [255,255,255]).all(-1).ravel()
我已经读取了一个图像数组:
import numpy as np
from scipy import misc
face1=misc.imread('face1.jpg')
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)`
Wall time: 2.57 s
因为我需要对大约 2000 张图像进行上述处理,有没有更快的方法可以将 运行 时间减少到毫秒或 naonseconds
您可以使用 broadcasting
对白色像素进行广播比较:[255, 255, 255]
和 ALL
使用 .all(axis=-1)
减少每一行,最后转换为 int
数据类型。这将为我们提供退出循环后的输出。
因此,一种实现方式是 -
(~((face1 == [255,255,255]).all(-1).ravel())).astype(int)
或者,更紧凑的版本 -
1-(face1 == [255,255,255]).all(-1).ravel()