我无法使此功能正常工作。基本上我正在做功能检测和匹配的参考图像。我想在我的输入图像上叠加匹配的功能。这里是我的代码:Android OpenCV:与feature2d绘图匹配
public Mat startProcessing(Mat inputImage) {
Imgproc.cvtColor(inputImage, rgb, Imgproc.COLOR_GRAY2RGB);
myFeatures.detect(rgb, keypoints);
descriptorExtractor.compute(inputImage, keypoints, imageDescriptors);
descriptorMatcher.match(templateDescriptors, imageDescriptors, matches);
Features2d.drawMatches(rgb, keypoints, templateImage, templateKeypoints, matches, rgb);
Imgproc.cvtColor(rgb, outputImage, Imgproc.COLOR_RGB2RGBA);
return outputImage;
}
它是Features2d.drawMatches这是特别的问题。根据我得到的Android错误,有些维度没有排列。真相被告知,我甚至不知道drawMatches
应该在Android上工作,因为没有任何文档。
我想要做的就是在inputImage的顶部绘制匹配。我已经获得Feature2d.drawKeypoints
的工作,但我不确定如何将MatOfDMatch matches
转换为MatOfKeypoint
对象。另外我甚至不确定这是MatOfDMatch的工作原理 - 它是否与描述符中的关联性相关?
对不起,我在使用OpenCV与Android非常困难。那里的C++文档很好,但是Android材料的用处不大。谢谢你的帮助!
感谢迄今。我开始使用imageOut = inputImage.clone(),这可以让drawMatches工作。然而,我想要返回这个imageOut作为用户在相机上看到的,但尺寸稍有不同 - 它是704 * 480,而不是我的相机分辨率为640 * 480。鉴于我的模板图像的宽度为64,看起来像drawMatches将它们放在一起。我可以在输入图像的匹配区域上显示矩形或其他东西吗? – JDS 2013-04-25 22:59:33
是的,我认为是。变换匹配和关键点以列出'列表 matches_list = matches.toList();列表 kp_list = keypoints.toList();'然后遍历列表'kp_list.get(matches_list.get(i).queryIdx)'和找到匹配关键点的最小和最大X和Y,以便遇到将定义您的矩形的两个点。然后定义一个矩形'Rect roi = new Rect(new Point(minX,minY),new Point(maxX,maxY))',然后只是'Mat imageFinal = new Mat(inputImage,roi);'它只会裁剪匹配的区域 –
andriy
2013-04-25 23:10:21