[英]How can i iterate over image pixels in a faster manner in python?
我想以某種方式修改灰度圖像,以便可以將圖像上半部分的像素值更改為黑色。 我當然可以通過這樣的常規方式迭代來做到這一點:
for i in range(0,rows):
for j in range(0,cols):
if(condition)
image[i,j] = 0;
但由於我必須進行視頻處理,因此速度很慢。 我可以看到我必須使用Image.point()
,但是我不確定如何實現它。 有人可以幫助我嗎?
如果您首先將PIL圖像轉換為numpy數組,這將會快得多。 以下是如何將值低於10的所有像素歸零:
>>> import numpy as np
>>> arr = np.array(img)
>>> arr[arr < 10] = 0
>>> img.putdata(arr)
或者,正如您在評論中所述,這里是您將圖像的上半部分塗黑:
>>> arr[:arr.shape[0] / 2,:] = 0
最后,由於您正在進行視頻處理,請注意您不必遍歷各個幀。 假設您有10幀4x4圖像:
>>> arr = np.ones((10,4,4)) # 10 all-white frames
>>> arr[:,:2,:] = 0 # black out the top half of every frame
>>> a
array([[[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]],
[[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]],
...
這是多處理圖像的非常好的候選者。 如果將圖像分割成像素塊,則可以非常輕松地並行處理圖像,即如果圖像足夠大或者您在大量圖像上執行此操作。
這取決於圖像大小和您選擇的線程數和塊大小,可以線性地加速您的過程,直到當然。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.