为了账号安全,请及时绑定邮箱和手机立即绑定

如何在异步任务中使用矩阵?

如何在异步任务中使用矩阵?

PIPIONE 2021-09-12 20:35:11
我对 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]);

}


查看完整回答
反对 回复 2021-09-12
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

在 Java 中Mat...表示Mat类类型的数组。如果你看错误

在 MainActivity 中识别 (org.opencv.core.Mat) 不能应用于 (org.opencv.core.Mat[])

你会注意到它说的是完全相同的东西,即你将一个数组传递给一个接受单个实例的方法。所以你需要做的就是:

return recognize(mats[0]);

Mat在该数组的第一个索引处获取。


查看完整回答
反对 回复 2021-09-12
  • 2 回答
  • 0 关注
  • 192 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信