目前我正在使用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或更改点的转换?
最后这是一个小问题,但我无法解释自己来自哪里!
谢谢你的帮助!
答案 0 :(得分:0)
确保您没有切换x <-> y
或row <-> col
。