Обнаружение OpenCV Java - PullRequest
       2

Обнаружение OpenCV Java

0 голосов
/ 28 апреля 2020

Я хотел бы обнаружить руку на следующих изображениях. Я попробовал алгоритм grabCut из opencv, используя передний план и фоновое извлечение. Тем не менее, есть некоторая неточность в обнаружении. Может ли кто-нибудь помочь мне с этим, пожалуйста. Благодарю вас.

Код выглядит следующим образом:

public static void DetectionAlg() {

        //convert from bitmap to mat
        Mat mat = new Mat(myBitmap.getWidth(), myBitmap.getHeight(), CvType.CV_8UC3);
        Utils.bitmapToMat(myBitmap, mat);

        //covert to bgr
        Mat bgrMat = new Mat();
        Imgproc.cvtColor(mat, bgrMat, Imgproc.COLOR_BGRA2BGR);    

        Mat background = new Mat(bgrMat.size(), CvType.CV_8UC3, new Scalar(255, 255, 255));
        Mat firstMask = new Mat();
        Mat bgModel = new Mat();
        Mat fgModel = new Mat();
        Mat mask;
        Mat source = new Mat(1, 1, CvType.CV_8U, new Scalar(Imgproc.GC_PR_FGD));
        Mat dst = new Mat();
        //using a user define area
        Rect rect = new Rect(GlobalVar.tl, GlobalVar.br);

        Imgproc.grabCut(bgrMat, firstMask, rect, bgModel, fgModel, 5, Imgproc.GC_INIT_WITH_RECT);
        Core.compare(firstMask, source, firstMask, Core.CMP_EQ);

        Mat foreground = new Mat(bgrMat.size(), CvType.CV_8UC3, new Scalar(255, 255, 255));
        bgrMat.copyTo(foreground, firstMask);

        Scalar color = new Scalar(255, 0, 0, 255);
        Imgproc.rectangle(bgrMat, GlobalVar.tl, GlobalVar.br, color);

        Mat tmp = new Mat();
        Imgproc.resize(background, tmp, bgrMat.size());
        background = tmp;
        mask = new Mat(foreground.size(), CvType.CV_8UC1, new Scalar(255, 255, 255));

        Imgproc.cvtColor(foreground, mask, Imgproc.COLOR_BGR2GRAY);
        Imgproc.threshold(mask, mask, 254, 255, Imgproc.THRESH_BINARY_INV);

        Mat vals = new Mat(1, 1, CvType.CV_8UC3, new Scalar(0.0));
        background.copyTo(dst);
        background.setTo(vals, mask);

        Core.add(background, foreground, dst, mask);

        firstMask.release();
        source.release();
        bgModel.release();
        fgModel.release();
        vals.release();

        Mat colorMat = new Mat();
        Imgproc.cvtColor(dst, colorMat, Imgproc.COLOR_BGR2BGRA);

        Bitmap outputBitmap = Bitmap.createBitmap(colorMat.cols(), colorMat.rows(), Bitmap.Config.ARGB_8888);
        Utils.matToBitmap(colorMat, outputBitmap);

    }

Изображения в ссылке: Это входное изображение Это еще одно входное изображение Это вывод с использованием вышеуказанного метода, однако есть некоторые другие части, которые не принадлежат руке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...