KNN поиск с OpenCV в Python

У меня есть этот пример кода для OpenCV в C++:

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);

Как я могу сделать то же самое в Python? Пробовал, но не может создать kdtree или KDTreeIndexParams с помощью cv2.

1 ответ

Решение

FLANN - это библиотека для ANN, написанная на C++ и независимая от OpenCV. Он предлагает привязки для Python, в Pyflann.

Пример можно найти здесь:

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

Этого примера должно быть достаточно, чтобы вы начали.

Другие вопросы по тегам