2013-08-21 20 views
1
def on_pushButtonTwo_clicked(self): 
    img = np.asarray(Image.open("testtwo.tif").convert # read image, convert it('L'))        
    img = 1 * (img < 127) 

    areasplit = np.split(img.ravel(), 24) # here we are splitting converted to 1D array 
    for i in areasplit: 
    area = (i == 0).sum() 
    print area 

    maxr = areasplit[argmax(sum(areasplit == 0, axis = 0)), :] # selecting subarrays with min and max white pixel numbers 
    minr = areasplit[argmin(sum(areasplit == 0, axis = 0)), :] 

    distance = cityblock(maxr, minr) # computing distance between subarrays 
    print distance 


    Result: type error: areasplit[argmax(sum(areasplit == 0, axis=0)), :] 
    TypeError: list indices must be integers, not tuple 

有什麼辦法可以選擇具有最小和最大白色像素數的子陣列嗎? 如何正確更改代碼?謝謝Numpy TypeError:列表索引必須是整數,而不是元組,如何更改代碼?

回答

0

areasplit是ndarray的列表,而不是ndarray,所以它不能採取第二個索引。這應該工作:

maxr = areasplit[argmax(sum(areasplit == 0, axis = 0))] 
minr = areasplit[argmin(sum(areasplit == 0, axis = 0))] 

或者,您ndarrays的列表轉換成2D ndarray這些調用之前:

areasplit = numpy.array(areasplit) 
+0

謝謝。然而所有的距離都是零。是否有argaverage或argmean函數,換句話說,如何選擇平均值/中值白色像素數的子陣列? – KvasDub

相關問題