Removing black background and make transparent from grabcut output in python open cv

前端 未结 2 1425
耶瑟儿~
耶瑟儿~ 2020-11-29 04:55

I have been trying to remove the black background from the grabcut output using python opencv.

import numpy as np
import cv2

img = cv2.imread(r\'myfile_1.p         


        
相关标签:
2条回答
  • 2020-11-29 05:17

    This is java code. After use grabcut, the result background is transparent.

    public Bitmap removeBackground(Bitmap bitmap) {
        //GrabCut part
        Mat img = new Mat();
        Utils.bitmapToMat(bitmap, img);
    
        int r = img.rows();
        int c = img.cols();
        Point p1 = new Point(c / 100, r / 100);
        Point p2 = new Point(c - c / 100, r - r / 100);
        Rect rect = new Rect(p1, p2);
    
        Mat mask = new Mat();
        Mat fgdModel = new Mat();
        Mat bgdModel = new Mat();
    
        Mat imgC3 = new Mat();
        Imgproc.cvtColor(img, imgC3, Imgproc.COLOR_RGBA2RGB);
    
        Imgproc.grabCut(imgC3, mask, rect, bgdModel, fgdModel, 5, Imgproc.
                GC_INIT_WITH_RECT);
    
        Mat source = new Mat(1, 1, CvType.CV_8U, new Scalar(3.0));
        Core.compare(mask, source/* GC_PR_FGD */, mask, Core.CMP_EQ);
    
        //This is important. You must use Scalar(255,255, 255,255), not Scalar(255,255,255)
        Mat foreground = new Mat(img.size(), CvType.CV_8UC3, new Scalar(255,
                255, 255,255));
        img.copyTo(foreground, mask);
    
        // convert matrix to output bitmap
        bitmap = Bitmap.createBitmap((int) foreground.size().width,
                (int) foreground.size().height,
                Bitmap.Config.ARGB_8888);
        Utils.matToBitmap(foreground, bitmap);
        return bitmap;
    }
    
    0 讨论(0)
  • 2020-11-29 05:27

    I have achieved this by using the following snippet.

    import cv2
    file_name = "grab.png"
    
    src = cv2.imread(file_name, 1)
    tmp = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
    _,alpha = cv2.threshold(tmp,0,255,cv2.THRESH_BINARY)
    b, g, r = cv2.split(src)
    rgba = [b,g,r, alpha]
    dst = cv2.merge(rgba,4)
    cv2.imwrite("test.png", dst)
    

    0 讨论(0)
提交回复
热议问题