Android featureDetector超出Bounds

时间:2013-11-29 18:16:29

标签: java android image opencv image-size

目前我正在使用Android Opencv。 Iam使用featureDetector和FAST方法在240 x 320图像上查找KeyPoints。

    //create a keypoint mat
    MatOfKeyPoint keyPoints = new MatOfKeyPoint();
    //create feature detector
    FeatureDetector fd = FeatureDetector.create(FeatureDetector.FAST);
    //detect feature points
    fd.detect(image, keyPoints);

    //return feature points
    return keyPoints;

接下来,我将在匹配后从KeyPoints中提取点数:

    DMatch[] matchesArray = matches.toArray();
    Vector<Point> pointsVec1 = new Vector<Point>();
    Vector<Point> pointsVec2 = new Vector<Point>();

    for(int i = 0; i < matchesArray.length; i++)
    {
        pointsVec1.add(keyPoints1.toArray()[matchesArray[i].queryIdx].pt);
        pointsVec2.add(keyPoints2.toArray()[matchesArray[i].trainIdx].pt);
    }

    points1.fromList(pointsVec1);
    points2.fromList(pointsVec2);

稍后我尝试获取这些点的像素颜色,这样做:

    Point[] pointsArray = points.toArray();
    Vector<byte[]> colorVector = new Vector<byte[]>();
    for(int i = 0; i< pointsArray.length; i++)
    {
        Point point = pointsArray[i];
        byte[] color = new byte[4];
        image.get((int) point.x, (int) point.y, color);
        colorVector.add(color);
    }
    return colorVector;

我仍然想知道因为图像的边界有点。例如,我通过调试发现了这一点:(308.0,16.0)。通过240 x 340图像,此点不在图像中。还有更多的要点。我已经检查了featureExtractor,并且Point已经包含在那里。所以我得到的颜色为R = 0,G = 0,B = 0.

所以我的问题是: 这些积分来自哪里? 我可以自己过滤它们,还是有功能中的Threshhold解决方案? 或者我必须切换x和y或更改点的转换?

最后这是一个小问题,但我无法解释自己来自哪里!

谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

确保您没有切换x <-> yrow <-> col