修改:以下是仍有问题的任何人的完整代码github.com
我正在尝试使用SIFT和BOW进行图像识别项目。到目前为止,我正在努力训练和建立我的字典。我已经读过5个不同类的图像,计算描述符并将它们全部添加到python列表([])中。现在,我正在尝试使用python版本的BOWMeansTrainer来将我的描述符聚类为k = 5(对于5个类,这是正确的吗?)。我正在尝试传递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)
正如您所看到的,我继续附加sift描述符,然后尝试转换为numpy数组(所需的格式)。
答案 0 :(得分:6)
感谢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