【问题标题】:KeyPoints opencv FAST detector android关键点 opencv FAST 检测器 android
【发布时间】:2015-02-16 17:34:45
【问题描述】:

我正在尝试使用 Opencv FAST 检测器在 Android 中设置阈值。我发现了一个类似的已解决问题here。我已经按照建议在检测方法之后列出了关键点列表,但仍然对我不起作用。就我而言,我想检测相机框架上的关键点:

public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
    MatOfKeyPoint points = new MatOfKeyPoint();

    Mat mat=inputFrame.rgba();
    FeatureDetector fast = FeatureDetector.create(FeatureDetector.FAST);
    fast.detect(mat, points);

    // Sort and select 500 best keypoints
    List<KeyPoint> listOfKeypoints = points.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);
    points.fromList(listOfBestKeypoints);   



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

    return mRgba;
}

问题是我的 listOfKeypoints 仍然为空。如果我不尝试设置阈值,代码可以正常工作,但速度太慢。

我在这里做错了什么?

谢谢。

【问题讨论】:

    标签: java android performance opencv


    【解决方案1】:

    我发现我的列表只有在第一次调用 onCameraFrame 时才为空。因此,我可以使用类变量并从第二次调用开始填充我的列表。

    private int count=0;
    

    然后在 onCameraFrame;

    if (count!=0) {
            //Sort and select 500 best keypoints
            List<KeyPoint> listOfKeypoints =  points.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);
            points.fromList(listOfBestKeypoints);
    
        } 
        count++;
    

    以这种方式它可以工作,但我仍然不明白为什么在第一次调用 onCameraFrame 时列表为空。有什么想法吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 2015-09-02
      • 2011-07-11
      • 1970-01-01
      • 2015-12-18
      相关资源
      最近更新 更多