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

我对 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[]) 并且我不知道如何解决它?谢谢进步。


PIPIONE
浏览 193回答 2
2回答

一只名叫tom的猫

该参数Mat...是一个可变参数参数,其作用类似于一个数组。(即Mat[])。要获得参数的第一个 Mat 使用mats[0]:@Overrideprotected Integer doInBackground(Mat... mats) {&nbsp; &nbsp; return recognize(mats[0]);}

慕虎7371278

在 Java 中Mat...表示Mat类类型的数组。如果你看错误在 MainActivity 中识别 (org.opencv.core.Mat) 不能应用于 (org.opencv.core.Mat[])你会注意到它说的是完全相同的东西,即你将一个数组传递给一个接受单个实例的方法。所以你需要做的就是:return&nbsp;recognize(mats[0]);Mat在该数组的第一个索引处获取。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java