2017-04-21 237 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

仔細看問題中的代碼。這不會做同樣的事情。 –