Не могу разобораться с opencv api, может подскажете как побороть?
Имеется
std::vector<cv::KeyPoint> keypoints;
хочется использовать
double kmeans(InputArray data, int K,
InputOutputArray bestLabels,
TermCriteria criteria,
int attempts, int flags,
OutputArray centers=noArray() )
но бог его знает что тут InputArray...
Видел, что в качестве data может передаваться
std::vector<cv::Point2f>
но это как бы несовсем то что у нас есть, т.е. нужно сделать что-то типа
std::vector<cv::Point2f> points(keypoints.size());
for (auto kp : keypoints)
{
points.push_back(kp.pt);
}
и это всё для того чтобы на выходе получить InputOutputArray, и это тоже непонятно что,
ну т.е. скорее всего это будет cv::Mat, но как оно будет наполнен?
и что у него будет по [row][col] ? объект какого типа?
как я ожидаю получить массив массивов точек (cv::Point)
или cv::Mat - это оно и есть?
Ну т.е. в каждой строке(столбце?) будет массив точке относящихся к данному кластеру?
....Ok, если так, то потом мне хочется сделать crop участка изображения, в который попадают точки нашего класса + учесть KeyPoint::size параметр, чтобы захватить area наших KeyPoints
Ну и фактически нужно пройтись по всем точкам класстера и найти его вернюю\нижнюю и левую\правую границы с учётом KeyPoint::size параметра (мне кажется, что это важно), как я сказал выше, а потом сделать кроп и наконец-то phash для полученого кусочка.
В самом cv::KeyPoint есть поле class_id, который как будто-то бы и предназначен для назначения id класстера к которому его отнесла какая-то функция разбивающая на кластеры, но тут получается какая-то ерунда с cv::KeyPoint, cv::Point2f и cv::kmeans() c учётом того что size (диаметр области ключевой точки) на ходится в KeyPoint и когда вычисляем границы вырезаемой области - нужно из InputOutputArray сопоставлять точки с keypoints и их параметром size
Много чего наговорил, но я надеюсь мы понимаем друг друга :))
Не могу разобораться с opencv api, может подскажете как побороть?
Имеется
хочется использовать
но бог его знает что тут InputArray...
Видел, что в качестве data может передаваться
но это как бы несовсем то что у нас есть, т.е. нужно сделать что-то типа
и это всё для того чтобы на выходе получить InputOutputArray, и это тоже непонятно что, ну т.е. скорее всего это будет cv::Mat, но как оно будет наполнен?
и что у него будет по [row][col] ? объект какого типа?
как я ожидаю получить массив массивов точек (cv::Point) или cv::Mat - это оно и есть?
Ну т.е. в каждой строке(столбце?) будет массив точке относящихся к данному кластеру?
....Ok, если так, то потом мне хочется сделать crop участка изображения, в который попадают точки нашего класса + учесть KeyPoint::size параметр, чтобы захватить area наших KeyPoints
Ну и фактически нужно пройтись по всем точкам класстера и найти его вернюю\нижнюю и левую\правую границы с учётом KeyPoint::size параметра (мне кажется, что это важно), как я сказал выше, а потом сделать кроп и наконец-то phash для полученого кусочка.
В самом cv::KeyPoint есть поле class_id, который как будто-то бы и предназначен для назначения id класстера к которому его отнесла какая-то функция разбивающая на кластеры, но тут получается какая-то ерунда с cv::KeyPoint, cv::Point2f и cv::kmeans() c учётом того что size (диаметр области ключевой точки) на ходится в KeyPoint и когда вычисляем границы вырезаемой области - нужно из InputOutputArray сопоставлять точки с keypoints и их параметром size
Много чего наговорил, но я надеюсь мы понимаем друг друга :))