python中opencv的knn搜索
我有c++中opencv的示例代码:python中opencv的knn搜索,python,opencv,image-processing,nearest-neighbor,kdtree,Python,Opencv,Image Processing,Nearest Neighbor,Kdtree,我有c++中opencv的示例代码: flann::KDTreeIndexParams indexParams; flann::Index kdtree(Mat(cloud2d).reshape(1), indexParams); vector<float> query; query.push_back(370); query.push_back(464); vector<int> indices; vector<float> dists; kdtree.
flann::KDTreeIndexParams indexParams;
flann::Index kdtree(Mat(cloud2d).reshape(1), indexParams);
vector<float> query;
query.push_back(370);
query.push_back(464);
vector<int> indices;
vector<float> dists;
kdtree.knnSearch(query, indices, dists, 3);
flann::KDTreeIndexParams indexParams;
flann::索引kdtree(Mat(cloud2d)。重塑(1),索引参数);
向量查询;
查询。推回(370);
查询。推回(464);
向量指数;
向量距离;
knnSearch(查询、索引、距离,3);
如何在python中实现同样的功能?尝试,但是不能用CV2创建KDDTURE或KDTreeIndexParams。 < P> FLANN是ANN的一个库,它是用C++编写的,并且独立于OpenCV。它为Python提供了绑定 例如:
这个例子应该足以让您开始学习。@gsamaras请将此作为答案发布,我会接受。
from pyflann import *
import numpy as np
dataset = np.array(
[[1., 1, 1, 2, 3],
[10, 10, 10, 3, 2],
[100, 100, 2, 30, 1]
])
testset = np.array(
[[1., 1, 1, 1, 1],
[90, 90, 10, 10, 1]
])
flann = FLANN()
result, dists = flann.nn(
dataset, testset, 2, algorithm="kmeans", branching=32, iterations=7, checks=16)
print result
print dists
dataset = np.random.rand(10000, 128)
testset = np.random.rand(1000, 128)
flann = FLANN()
result, dists = flann.nn(
dataset, testset, 5, algorithm="kmeans", branching=32, iterations=7, checks=16)
print result
print dists