我正在尝试根据输入图像检索一组类似的图像。我正在使用一个带序列的数组元素。使用序列设置数组元素。 OpenCV
顺便提一下Python
。我的策略是获得图像数据库的SURF
功能,然后将其放入k-NN
模型中,这样每当我使用SURF功能查询图像并查找类似的图像时项目,我可以使用k-NN
来获取最近的邻居。问题是,我尝试通过放置k-NN
描述符然后展平它来scikit-learn
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))
更新:这是我的代码
try {
Robot robot = new Robot();
// Simulate a key press
robot.keyPress(KeyEvent.VK_ESCAPE);
robot.keyRelease(KeyEvent.VK_ESCAPE);
} catch (AWTException e) {
e.printStackTrace();
}
答案 0 :(得分:0)
我不确定您收到的错误消息,但请确保描述符维度存在问题。
冲浪首先找到图像的关键点,然后为每个关键点生成一个固定大小的描述符。 问题是,对于每个图像,您将获得不同数量的关键点,然后当您执行“descriptors.tolist()”时,它会连接此关键点的所有描述符,但您将为每个图像获得不同的大小
尝试阅读关于词袋甚至更好的费舍尔矢量来处理这类问题