2017-04-21 136 views
1

进出口运行这个填补图像底部从值> 0一些上像素开始:优化这个Python代码

def fillDown(im): 
    h,w=im.shape 
    for i in range(w): 
     for j in range(h): 
      if im[j][i]>0: 
       for k in range(j,h): 
        im[k][i]=255 
       break 

这需要的时间太长了大图片,建议你将如何优化呢?

回答

3

我相信下面的代码做你在找什么:

im = np.array([[0,0,0,0],[0,0,1,1],[0,0,0,1],[0,1,1,1]]) # Example 
#array([[0, 0, 0, 0], 
#  [0, 0, 1, 1], 
#  [0, 0, 0, 1], 
#  [0, 1, 1, 1]]) 

im[im.cumsum(axis=0) > 0] = 255 
#array([[ 0, 0, 0, 0], 
#  [ 0, 0, 255, 255], 
#  [ 0, 0, 255, 255], 
#  [ 0, 255, 255, 255]]) 

希望它比三重嵌套循环更有效。

-1

我想用numpy来做到这一点。

import numpy as np 

im = np.random.ranint(0, 2, (2, 2)) 
im[np.where(im > 0)] = 255 
+0

您的解决方案留下未填充的“洞”。 – DyZ

+0

仔细看问题中的代码。这不会做同样的事情。 –