我对 Java 比较陌生,我需要帮助才能将矩阵与异步任务一起使用。我onCameraFrame在后台使用输入框从到分析。我将提供方法和异步任务。 public int recognize(Mat inputFrame) { int detector=0; Mat gray= inputFrame; if (startedFrame){ BRISK.detect(inputFrame,keypoints1); BRISK.compute(inputFrame,keypoints1,deskriptor1); startedFrame=false; return 0; } BRISK.detect(inputFrame,keypoints2); BRISK.compute(inputFrame,keypoints2,deskriptor2); List<MatOfDMatch> matches = new LinkedList<MatOfDMatch>(); matcher.knnMatch(deskriptor1, deskriptor2, matches,2); //Calculating good match list... LinkedList<DMatch> goodMatchesList = new LinkedList<DMatch>(); for (int i = 0; i < matches.size(); i++) { MatOfDMatch matofDMatch = matches.get(i); DMatch[] dmatcharray = matofDMatch.toArray(); DMatch m1 = dmatcharray[0]; DMatch m2 = dmatcharray[1]; if (m1.distance <= m2.distance * nndrRatio) { goodMatchesList.addLast(m1); } } if (goodMatchesList.size() >= 7) { List<KeyPoint> controlKeypointlist = keypoints1.toList(); List<KeyPoint> liveKeypointlist = keypoints2.toList(); LinkedList<Point> objectPoints = new LinkedList<>(); LinkedList<Point> scenePoints = new LinkedList<>(); for (int i = 0; i < goodMatchesList.size(); i++) { objectPoints.addLast(controlKeypointlist.get(goodMatchesList.get(i).queryIdx).pt); scenePoints.addLast(liveKeypointlist.get(goodMatchesList.get(i).trainIdx).pt); } MatOfPoint2f objMatOfPoint2f = new MatOfPoint2f(); objMatOfPoint2f.fromList(objectPoints); MatOfPoint2f scnMatOfPoint2f = new MatOfPoint2f(); scnMatOfPoint2f.fromList(scenePoints); detector=1; keypoints2.release(); deskriptor2.release(); return 2; }问题在于return recognize(mats);,在参数mats中它说:在 MainActivity 中识别 (org.opencv.core.Mat) 不能应用于 (org.opencv.core.Mat[]) 并且我不知道如何解决它?谢谢进步。
2 回答
一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
该参数Mat...是一个可变参数参数,其作用类似于一个数组。(即Mat[])。
要获得参数的第一个 Mat 使用mats[0]:
@Override
protected Integer doInBackground(Mat... mats) {
return recognize(mats[0]);
}
慕虎7371278
TA贡献1802条经验 获得超4个赞
在 Java 中Mat...
表示Mat
类类型的数组。如果你看错误
在 MainActivity 中识别 (org.opencv.core.Mat) 不能应用于 (org.opencv.core.Mat[])
你会注意到它说的是完全相同的东西,即你将一个数组传递给一个接受单个实例的方法。所以你需要做的就是:
return recognize(mats[0]);
Mat
在该数组的第一个索引处获取。
添加回答
举报
0/150
提交
取消