2013-12-11 31 views
0

所以這是一個非常奇怪的問題,我一直在得到。我基本上試圖創建一個練習碼書,它使用由Python中的kmeans算法聚類的圖像的SIFT特徵。然而,每當我運行代碼,我得到以下錯誤Scipy.cluster.vq.kmeans「list has no attribute shape」

Traceback (most recent call last): 
    File "C:\Users\Administrator\Desktop\Python\assignment2\SIFT_Dectection.py", line 34, in <module> 
    codebook, dis = cluster.vq.kmeans(codebook_construction(files[:20]),3) 
    File "C:\Python27\lib\site-packages\scipy\cluster\vq.py", line 513, in kmeans 
    No = obs.shape[0] 
AttributeError: 'list' object has no attribute 'shape' 

我認爲這是對SciPy的庫中的VQ腳本中的錯誤。不過,我還有其他朋友也在爲此工作,我使用與scipy庫完全相同的代碼,但我仍然遇到這個問題。我也嘗試徹底卸載Python重新安裝一切。我在Windows 7 btw上運行的東西。我使用的代碼如下所示:

import cv2 
import glob 
from scipy import cluster 

files = glob.glob('101_ObjectCategories/*/*.jpg') 

def codebook_construction(im): 

    codebook = [] 

    for image in im: 
     img = cv2.imread(image) 
     gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
     sift = cv2.SIFT() 
     kp, desc = sift.detectAndCompute(gray, None) 

     if codebook == []:    
      codebook = desc 

     else: 
      codebook = np.vstack((codebook, desc)) 

    return codebook 

codebook, dis = cluster.vq.kmeans(codebook_construction(files[:20]),3) 

那裏的glob函數需要我從加州理工學院下載的圖像庫。我已經搜索了高和低的答案,但似乎沒有人有類似的問題。希望我可以在這裏得到一些指導

回答

2

這個問題看起來是kmeans正在期待一個數組,並且你給它一個列表。嘗試將codebook_construction()函數的最後一行更改爲:

return scipy.array(codebook) 
相關問題