编辑:这是仍有问题的任何人的完整代码github.com

我正在尝试使用SIFT和BOW进行图像识别项目。到目前为止,我正在尝试培训和构建我的字典。我从5个不同的类中读取了图像,并计算了描述符,并将它们全部并排添加到python列表([])中。现在,我正在尝试使用BOWMeansTrainer的python版本将我的描述符聚类为k = 5(这对5个类正确吗?)。我正在尝试通过我的描述符 vector cluster(),但出现错误

Traceback (most recent call last):


File "C:\Python27\Project2\beginning.py", line 40, in <module>
    bow.cluster(des)
TypeError: descriptors data type = 17 is not supported

我不太确定将numpy数组放入哪种格式,有人知道吗?
sift = cv2.SIFT()

descriptors = []
for path in training_paths:
    image = cv2.imread(path)
    print path
    gray = cv2.cvtColor(image, cv2.CV_LOAD_IMAGE_GRAYSCALE)
    kp, dsc= sift.detectAndCompute(gray, None)
    descriptors.append(dsc)

des = np.array(descriptors)

k=5
bow = cv2.BOWKMeansTrainer(k)
bow.cluster(des)

如您所见,我一直在追加筛选描述符,然后尝试转换为numpy数组(所需的格式)。

最佳答案

只是感谢opencv论坛才弄清楚了,而不是使用另一个列表(我在上面使用了描述符),只需使用bow.add(dsc)将找到的描述符直接添加到包中即可

dictionarySize = 5

BOW = cv2.BOWKMeansTrainer(dictionarySize)

for p in training_paths:
    image = cv2.imread(p)
    gray = cv2.cvtColor(image, cv2.CV_LOAD_IMAGE_GRAYSCALE)
    kp, dsc= sift.detectAndCompute(gray, None)
    BOW.add(dsc)

#dictionary created
dictionary = BOW.cluster()

编辑:对于其他有麻烦的人,我已经上传了其余脚本here

09-06 17:11