我正在使用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的高级索引
但是,它失败了&#34; ValueError:解压缩的值太多&#34;。我怎样才能做到这一点? im = np.array(rgb)
im[ evalPixel(im, sess) < 0.6 ] = 0
答案 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
函数应该做什么