2016-08-04 67 views
0

我正在使用PIL進行圖像分割,其中我使用嵌套迭代來索引圖像,但運行速度非常慢。 PIL圖像在numpy索引數組中的評估函數

def evalPixel((r,g,b), sess): 
    pixel = [float(r)/255, float(g)/255, float(b)/255] 
    test = sess.run(y, feed_dict={x: [pixel]}) 
    return test[0][0] 

... 
... 

# sess = sesion loaded from TensorFlow 
rgb = Image.open("face.jpg") 
height, width = rgb.size 

for y in range(height): 
    for x in range(width): 
     if (evalPixel(rgb.getpixel((x,y)), sess) < 0.6): 
      rgb.putpixel((x,y), 0) 

toimage(im).show() 

我想要做這樣的事情,使用numpy的

im = np.array(rgb) 
im[ evalPixel(im, sess) < 0.6 ] = 0 

的高級索引但是,它失敗「ValueError異常:值過多解壓」。我怎樣才能做到這一點?

回答

0

嘗試使用以下:

im = np.array(rgb) 
im = [[evalPixel(x,sess) < 0.6 for x in row] for row in im] 

通過使用構造,以產生行和列,這是可能的,以避免意外地應用一個函數與一個參數(在這種情況下,一個元組),以整行或整柱。

0

您的函數evalPixel將元組作爲第一個參數,但您的numpy數組不包含(也不能包含)元組。你必須重寫該函數才能夠使用numpy數組。

我試着爲你做一個工作示例,但是你共享的代碼包含了很多未知的變量(你遺漏了太多),並且我不清楚evalPixel函數應該做什麼。

+0

請看下面的代碼:https:// goo.gl/Nr5T1L – miguelote