具有PIL图像的numpy索引数组内的评估函数

时间:2016-08-04 16:18:03

标签: python numpy python-imaging-library

我正在使用PIL进行图像分割,我使用嵌套迭代来索引图像,但运行速度非常慢。

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()

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
但是,它失败了&#34; ValueError:解压缩的值太多&#34;。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

尝试使用以下内容:

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

通过使用构造函数生成行和列,可以避免意外地将具有单个参数的函数(在本例中为元组)应用于整个行或列。

答案 1 :(得分:0)

你的函数evalPixel将元组作为第一个参数,但是你的numpy数组不包含(也不能包含)元组。你必须重写该函数才能使用numpy数组。

我试图为你做一个有用的例子,但是你共享的代码包含很多未知变量(你遗漏了太多)而且我不清楚evalPixel函数应该做什么