使用SURF功能训练k-NN时出错

时间:2017-10-22 16:19:17

标签: python opencv model similarity knn

我正在尝试根据输入图像检索一组类似的图像。我正在使用一个带序列的数组元素。使用序列设置数组元素。 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();
        }

1 个答案:

答案 0 :(得分:0)

我不确定您收到的错误消息,但请确保描述符维度存在问题。

冲浪首先找到图像的关键点,然后为每个关键点生成一个固定大小的描述符。 问题是,对于每个图像,您将获得不同数量的关键点,然后当您执行“descriptors.tolist()”时,它会连接此关键点的所有描述符,但您将为每个图像获得不同的大小

尝试阅读关于词袋甚至更好的费舍尔矢量来处理这类问题