Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在opencv中创建自己的特征检测方法?_C++_Opencv_Feature Detection_Keypoint - Fatal编程技术网

C++ 如何在opencv中创建自己的特征检测方法?

C++ 如何在opencv中创建自己的特征检测方法?,c++,opencv,feature-detection,keypoint,C++,Opencv,Feature Detection,Keypoint,让我们看一看名为Features2D+单应性的基本教程,以查找已知对象。它使用SurfFeatureDetector检测功能: SurfFeatureDetector detector( minHessian ); std::vector<KeyPoint> keypoints_object, keypoints_scene; detector.detect( img_object, keypoints_object ); detector.detect( img_s

让我们看一看名为Features2D+单应性的基本教程,以查找已知对象。它使用SurfFeatureDetector检测功能:

  SurfFeatureDetector detector( minHessian );
  std::vector<KeyPoint> keypoints_object, keypoints_scene;
  detector.detect( img_object, keypoints_object );
  detector.detect( img_scene, keypoints_scene );
SurfFeatureDetector检测器(minHessian);
std::矢量关键点\对象,关键点\场景;
检测器。检测(img_对象、关键点_对象);
检测器。检测(img_场景、关键点_场景);
然后,它使用
SurfDescriptorExtractor
使用检测到的特征计算描述符(特征向量)

我的问题是:

  • 如果我想创建自己的特征检测器(例如使用Trajkovic或Harris算法),我应该使用哪个描述符提取器
  • 在SurfFeatureDetector中找到的特征仅仅是公共点还是点的区域
  • ***添加***

    1) 在本例中,使用了特征检测的Surf算法。我制作了自己的算法(Trajkovic),效果非常好——所有的角点(图像特征)都被找到了。然后,我尝试使用示例中使用的SurfDescriptorExtractor。 问题是SurfDescriptorExtractor不想以正确的方式使用我创建的点(结果图片显示的连接错误,这意味着提取器没有正确计算向量)

    2) 我需要准确地使用opencv,这就是重点

    3) “特征检测器”是一种算法,它试图在图像上找到关键点(特征或角点),“描述符提取器”是一种算法,它计算特征向量以最好地理解关键点的位置和方向


    4) 总之,在示例中,两幅图像上的所有关键点都是连接的(正如您在教程的最后一张图片上看到的),然后用矩形高亮显示。但是当我使用Trajkovic算法时,它们以错误的方式连接,这就是为什么没有突出显示的矩形。

    虽然我们无法在不查看您的实现的情况下确定问题,甚至可能进行一些调查,但我可以为您指出解决方案的方向:OpenCV源代码,您可以与它们的实现进行比较

    查看
    detectAndCompute()
    函数:

    Harris角点检测的工作原理稍有不同,其API也是如此:


    我猜您没有得到答案的原因有两个:1)这个问题可以更好地描述;2) 您将问题限制在opencv(因此是标记)上,这没有任何帮助。例如,我对您在“特征检测器”和“描述符提取器”之间设置的差异感到困惑。假设使用典型的Harris角点检测方法,只需保留所有角点或接受一个减少使用角点数量的参数即可。那么最简单的描述符就是每个点出现的位置。您还需要什么?谢谢您的回复,我已经为您的上述问题添加了所有答案,请在那里找到。