2016-08-04 68 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