簡體   English   中英

在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) 288,352,3 (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個圖像的上述過程中做任何更快的方法,我們可以將運行時間減少到毫秒或毫秒

您可以使用broadcasting對白色像素執行廣播比較: [255, 255, 255]ALL使用.all(axis=-1)減少每一行,最后轉換為int dtype。 這將為我們提供退出循環后您將擁有的輸出。

因此,一個實施將是 -

(~((face1 == [255,255,255]).all(-1).ravel())).astype(int)

或者,更緊湊的版本 -

1-(face1 == [255,255,255]).all(-1).ravel()

暫無
暫無

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

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