Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Remove background from canny image in android opencv

Hello,

i want remove background from captured image. As of now i am capture usa driving license image and convert it into canny image. Here bellow is my output image so i want to remove rest of all background Except for square of the license image. i was try grab cut image for this but it's not working properly. because sometime it's transparent card background also. i need transparent only rest of other background canny edges not a card.

here is my code which i used from this reference code:

    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, 1 ,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);
          findEdges(bitmap);
          return bitmap;
}

image description

Remove background from canny image in android opencv

Hello,

i want remove background from captured image. As of now i am capture usa driving license image and convert it into canny image. Here bellow is my output image so i want to remove rest of all background Except for square of the license image. i was try grab cut image for this but it's not working properly. because sometime it's transparent card background also. i need transparent only rest of other background canny edges not a card.

It will be great, if you suggest me the way.

here is my code which i used from this reference code:

    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, 1 ,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);
          findEdges(bitmap);
          return bitmap;
}

image description

Remove background from canny image in android opencv

Hello,

i want remove background from captured image. As of now i am capture usa driving license image and convert it into canny image. Here bellow is my output image so i want to remove rest of all background Except for square of the license image. i was try grab cut image for this but it's not working properly. because sometime it's transparent card background also. i need transparent only rest of other background canny edges not a card.

It will be great, if you suggest me the best way.

here is my code which i used from this reference code:

    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, 1 ,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);
          findEdges(bitmap);
          return bitmap;
}

image description

Remove background from canny image in android opencv

Hello,

i want remove background from captured image. As of now i am capture usa driving license image and convert it into canny image. Here bellow is my output image so i want to remove rest of all background Except for square of the license image. i was try grab cut image for this but it's not working properly. because sometime it's transparent card background also. i need transparent only rest of other background canny edges not a card.

It will be great, if you suggest me the best way.

here is my code which i used from this reference code:

    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, 1 ,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);
          findEdges(bitmap);
          return bitmap;
}

image description

Remove background from canny image in android opencv

Hello,

i want remove background from captured image. As of now i am capture usa driving license image and convert it into canny image. Here bellow is my output image so i want to remove rest of all background Except for square of the license image. i was try grab cut image for this but it's not working properly. because sometime it's transparent card background also. i need transparent only rest of other background canny edges not a card.

It will be great, if you suggest me the best way.

here is my code which i used from this reference code:

    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, 1 ,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);
          findEdges(bitmap);
          return bitmap;
}

image description

Remove background from canny image in android opencv

Hello,

i want remove background from captured image. As of now i am capture usa driving license image and convert it into canny image. Here bellow is my output image so i want to remove rest of all background Except for square of the license image. i was try grab cut image for this but it's not working properly. because sometime it's transparent card background also. i need transparent only rest of other background canny edges not a card.

It will be great, if you suggest me the best way.

here is my code which i used from this reference code:

    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, 1 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);
          findEdges(bitmap);
          return bitmap;
}

image description

Remove background from canny image in android opencv

Hello,

i want remove background from captured image. As of now i am capture usa driving license image and convert it into canny image. Here bellow is my output image so i want to remove rest of all background Except for square of the license image. i was try grab cut image for this but it's not working properly. because sometime it's transparent card background also. i need transparent only rest of other background canny edges not a card.

It will be great, if you suggest me the best way.

here is my code which i used from this reference code:

    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 4 ,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);
          findEdges(bitmap);
          return bitmap;
}

image description

Remove background from canny image in android opencv

Hello,

i want remove background from captured image. As of now i am capture usa driving license image and convert it into canny image. Here bellow is my output image so i want to remove rest of all background Except for square of the license image. i was try grab cut image for this but it's not working properly. because sometime it's transparent card background also. i need transparent only rest of other background canny edges not a card.

It will be great, if you suggest me the best way.

here is my code which i used from this reference code:

    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, 4 ,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);
          findEdges(bitmap);
          return bitmap;
}

image description

Remove background from canny image in android opencv

Hello,

i want remove background from captured image. As of now i am capture usa driving license image and convert it into canny image. Here bellow is my output image so i want to remove rest of all background Except for square of the license image. i was try grab cut image for this but it's not working properly. because sometime it's transparent card background also. i need transparent only rest of other background canny edges not a card.

It will be great, if you suggest me the best way.

here is my code which i used from this reference code:

    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, 4 ,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);
          findEdges(bitmap);
          return bitmap;
}

image description

Remove background from canny image in android opencv

Hello,

i want remove background from captured image. As of now i am capture usa driving license image and convert it into canny image. Here bellow is my output image so i want to remove rest of all background Except for square of the license image. i was try grab cut image for this but it's not working properly. because sometime it's transparent card background also. i need transparent only rest of other background canny edges not a card.

It will be great, if you suggest me the best way.

here is my code which i used from this reference code:

    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, 4 ,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);
          findEdges(bitmap);
          return bitmap;
}

image description

Remove background from canny image in android opencv

Hello,

i want remove background from captured image. As of now i am capture usa driving license image and convert it into canny image. Here bellow is my output image so i want to remove rest of all background Except for square of the license image. i was try grab cut image for this but it's not working properly. because sometime it's transparent card background also. i need transparent only rest of other background canny edges not a card.

It will be great, if you suggest me the best way.

here is my code which i used from this reference code:

    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, 4 ,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);
          findEdges(bitmap);
          return bitmap;
}

image description