我正在尝试基于输入图像检索一组相似的图像。我用序列来设置数组元素。使用序列设置数组元素。顺便说一句,Python的OpenCV。我的策略是获取图像数据库的SURF特征,然后将其放入k-NN模型中,这样每当我使用SURF特征查询图像并查找相似的项集时,我就可以使用k-NN获得最近的邻居。问题是,我尝试在scikit-learn中训练k-NN模型,方法是放置SURF描述符,然后将其扁平化。然而,每当我尝试训练模型时,这个错误就一直出现。setting an array element with a sequence.setting an array element with a sequence.
我做错了什么?我应该如何表示要素,以便可以在k-NN中使用它
更新:以下是我的代码
SURFObject = cv2.SURF(hessianThreshold = 400, extended = 0)
image_names = []
image_descriptors = []
for i in range(1, 4001):
print("Image Number: " + str(i))
filename = 'cat.'+ str(i) +'.jpg'
img = cv2.imread(filepath + filename)
keypoints, descriptors = SURFObject.detectAndCompute(img, None)
image_descriptors.append(descriptors.tolist())
image_names.append(filename)
neighbors = NearestNeighbors(10, 0.5)
neighbors.fit(np.array(image_descriptors).reshape(-1,1))发布于 2017-10-23 18:01:10
我不能完全确定您收到的错误消息,但可以肯定的是,您在描述符维度方面有问题。
Surf首先为图像找到关键点,然后为每个关键点生成固定大小的描述符。问题是,对于每个图像,您将获得不同数量的关键点,然后当您执行"descriptors.tolist()“时,它将连接此关键点的所有描述符,但您将为每个图像获得不同的大小
尝试阅读有关词袋或更好的fisher向量来处理这类问题
https://stackoverflow.com/questions/46876388
复制相似问题