所以这是我遇到的一个非常奇怪的问题。我基本上试图创建一个练习码本,它使用由Python中的kmeans算法聚类的图像的SIFT特征。但是每当我运行代码时,我都会收到以下错误
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上的东西顺便说一句。我正在使用的代码看起来像这样:
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函数需要我从Caltech下载的图像库。我已经搜索了高低的答案,但似乎没有人遇到过类似的问题。希望我能在这里得到一些指导
答案 0 :(得分:2)
问题似乎是kmeans
期待一个数组,而你正在为它提供一个列表。尝试将codebook_construction()
功能的最后一行更改为:
return scipy.array(codebook)