gpt4 book ai didi

Android OpenCV FAST 角点检测过滤

转载 作者:行者123 更新时间:2023-12-02 17:41:18 26 4
gpt4 key购买 nike

我正在尝试开发一个 android 应用程序,它应该分析来自相机的帧并检测角落。

我的目标是检测当前棋盘状态并向服务器提供数据。

我已经在我的应用程序中实现了 OpenCV,并且正在尝试使用 FAST 角点检测。

这是我分析当前相机帧的代码的一部分:

 @Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
MatOfKeyPoint points = new MatOfKeyPoint();
try {
Mat mat = inputFrame.rgba();
FeatureDetector fast = FeatureDetector.create(FeatureDetector.FAST);
fast.detect(mat, points);


Scalar redcolor = new Scalar(255, 0, 0);
Mat mRgba = mat.clone();
Imgproc.cvtColor(mat, mRgba, Imgproc.COLOR_RGBA2RGB, 4);

Features2d.drawKeypoints(mRgba, points, mRgba, redcolor, 1);
mat.release();
return mRgba;
}
catch (Exception e)
{
return inputFrame.rgba();
}
}

此代码有效。问题是我得到了太多的角落。我想知道一种实现阈值的方法。

在这个 Doc它谈到了“非最大抑制”。

如果有人不知道答案但知道在哪里可以找到 android 更新的文档,那就太好了!

谢谢!

最佳答案

我知道有两种方法可以用来对关键点进行排序:

  • 更新 .xml/.yml具有不同阈值的检测器文件。您可以找到有关如何执行此操作的引用 here
  • 您可以根据需要对 MatOfKeyPoint 的响应进行排序并选择前 100 或 200。您可以在 java 中使用以下命令:
  • // Sort and select 500 best keypoints
    List<KeyPoint> listOfKeypoints = matrixOfKeypoints.toList();
    Collections.sort(listOfKeypoints, new Comparator<KeyPoint>() {
    @Override
    public int compare(KeyPoint kp1, KeyPoint kp2) {
    // Sort them in descending order, so the best response KPs will come first
    return (int) (kp2.response - kp1.response);
    }
    });
    List<KeyPoint> listOfBestKeypoints = listOfKeypoints.subList(0, 500);

    关于Android OpenCV FAST 角点检测过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44519080/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com