我从这里得到了灵感,这是一个Python实现,但我需要C++,这个答案非常有效,我的想法是:detectAndCompute获取keypoints,使用kmeans它们将它们分割成簇,然后为每个簇做matcher->knnMatch每个descriptors,然后做其他的东西,如常见的单一检测方法.主要问题是,如何descriptors为每个集群的matcher->knnMatch流程提供?我以为我们应该将keypoints对应的值设置descriptor为0(无用),对不对?我的尝试遇到了一些问题:
kmeans?Mat descriptors_scene_clusters[3] = { Mat(descriptors_scene.rows, descriptors_scene.cols, CV_8U, Scalar(0)) };?非常感谢任何帮助,请!

#include <stdio.h>
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/calib3d/calib3d.hpp>
#include <opencv2/xfeatures2d.hpp>
using namespace cv;
using namespace cv::xfeatures2d;
#define MIN_MATCH_COUNT 10
int main()
{
Mat img_object = imread("./2.PNG", IMREAD_GRAYSCALE);
Mat img_scene = imread("./1.PNG", IMREAD_GRAYSCALE);
Ptr<ORB> detector …Run Code Online (Sandbox Code Playgroud) 我正在对数据集执行均值平移聚类。estimate_bandwidth 函数估计执行均值漂移聚类的适当带宽。
句法:
sklearn.cluster.estimate_bandwidth(X, quantile=0.3, n_samples=None, random_state=0)
Run Code Online (Sandbox Code Playgroud)
我发现估计的带宽随着分位数的增加而增加,从而导致簇数量减少。类似地,分位数的减少会减少带宽,从而导致更高的数量。簇。
所以,看来不行。簇的数量取决于所选的分位数值。
如何选择最佳分位数?
我尝试寻找均值平移的 OpenCV 方法,但没有任何结果。我正在寻找一种方法来查找图像中的簇,并使用 python OpenCV 将它们替换为它们的平均值。任何线索将不胜感激。
例如:
输入:
输出: