Example usage for org.opencv.imgproc Imgproc grabCut

List of usage examples for org.opencv.imgproc Imgproc grabCut

Introduction

In this page you can find the example usage for org.opencv.imgproc Imgproc grabCut.

Prototype

public static void grabCut(Mat img, Mat mask, Rect rect, Mat bgdModel, Mat fgdModel, int iterCount, int mode) 

Source Link

Usage

From source file:OCV_GrabCut.java

License:Open Source License

@Override
public void run(ImageProcessor ip) {
    // src (RGB)/*w w  w  .j  a v a  2 s .com*/
    int[] src_arr = (int[]) imp_src.getChannelProcessor().getPixels();
    int imw_src = imp_src.getWidth();
    int imh_src = imp_src.getHeight();
    Mat mat_src = new Mat(imh_src, imw_src, CvType.CV_8UC3);
    OCV__LoadLibrary.intarray2mat(src_arr, mat_src, imw_src, imh_src);

    // tmp (Gray)
    byte[] msk_arr = (byte[]) imp_msk.getChannelProcessor().getPixels();
    int imw_msk = imp_msk.getWidth();
    int imh_msk = imp_msk.getHeight();
    int numpix_msk = imw_msk * imh_msk;

    // output
    Mat mat_msk = new Mat(imh_msk, imw_msk, CvType.CV_8UC1);
    Mat bgdModel = new Mat();
    Mat fgdModel = new Mat();

    // run      
    mat_msk.put(0, 0, msk_arr);
    Imgproc.grabCut(mat_src, mat_msk, rect, bgdModel, fgdModel, iter, TYPE_VAL[ind_type]);
    mat_msk.get(0, 0, msk_arr);

    if (enFgd) {
        for (int i = 0; i < numpix_msk; i++) {
            if (msk_arr[i] == Imgproc.GC_FGD || msk_arr[i] == Imgproc.GC_PR_FGD) {
                msk_arr[i] = (byte) 255;
            } else {
                msk_arr[i] = (byte) 0;
            }
        }
    }
}