我在Android中使用Opencv4Android 2.4.6尝试了FAST角点检测。 检测到关键点,但视图未显示绘制的关键点,或
Features2d.drawKeypoints
不工作,我不知道。
public Mat onCameraFrame(Mat inputFrame) {
MatOfKeyPoint points = new MatOfKeyPoint();
Mat mat = inputFrame;
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_RGBA2BGRA,4);
Core.line(mRgba, new Point(100, 100), new Point(300,300), new Scalar(0, 0, 255));
Features2d.drawKeypoints(mRgba, points, mRgba, redcolor, 3);
return mRgba;
}
通过记录,我可以看到检测到许多关键点。但是没有在看到的中绘制。 我试图在视图中绘制的线也显示在视图中,但不显示在关键点上。
请帮助。 谢谢你
答案 0 :(得分:2)
我认为问题出在 DrawMatchesFlags ,这是 drawKeypoints 函数中的最后一个输入..参考function description,你可以看到所有正在使用的标志..我建议你使用 DrawMatchesFlags :: DEFAULT ,如果你不想进入细节..
希望这有帮助。
答案 1 :(得分:2)
问题在于Imgproc.cvtColor
。
问题是不幸的是,drawKeypoints()不能与RGBA Mats一起使用,它只接受8UC3和8UC1。 因此,如果您想调用drawKeypoints(),则需要将图片转换为RGB,然后再转换回RGBA进行显示。
所以我将代码更改为Imgproc.cvtColor(mat, mRgba, Imgproc.COLOR_RGBA2RGB,4);
现在工作正常,蓝色问题也被删除了
感谢您的回答