OpenCV,Android:删除背景线仅绘制对象

OpenCV,Android:删除背景线仅绘制对象,android,opencv,Android,Opencv,我试着只检测、绘制和填充/将电池涂成黑色,而将其他所有东西填充成白色,但我也从背景中获得了其他线条。我该如何着手解决这个问题 注意:我无法更改输入图像的背景 下面是我使用以下代码绘制黑色物体轮廓后得到的图像输出: if(getIntent().hasExtra("byteArray")) { b = BitmapFactory.decodeByteArray(getIntent().getByteArrayExtra("byteArray"),0,getIntent()

我试着只检测、绘制和填充/将电池涂成黑色,而将其他所有东西填充成白色,但我也从背景中获得了其他线条。我该如何着手解决这个问题

注意:我无法更改输入图像的背景

下面是我使用以下代码绘制黑色物体轮廓后得到的图像输出:

if(getIntent().hasExtra("byteArray")) {

            b = BitmapFactory.decodeByteArray(getIntent().getByteArrayExtra("byteArray"),0,getIntent().getByteArrayExtra("byteArray").length);
            contours = new ArrayList<>();
            srcMat= new Mat();
            gray = new Mat();
            matHSV = new Mat();
            Utils.bitmapToMat(b,srcMat);

            Imgproc.cvtColor(srcMat, gray, Imgproc.COLOR_RGBA2GRAY);
            Imgproc.Canny(gray, gray, 20, 20*3, 3, true);

            Mat hierarchy = new Mat();
            Imgproc.findContours(gray,contours,hierarchy,Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
            for (int contourIdx = 0; contourIdx < contours.size(); contourIdx++) {
                Imgproc.drawContours(srcMat, contours, contourIdx, new Scalar(0, 0, 255), -1);


            }
            mask =  new Mat(new Size(srcMat.cols(), srcMat.rows() ), CvType.CV_8UC1);
            mask.setTo(new Scalar(255));

            black = new Scalar(0,0,0);
            Imgproc.drawContours(mask, contours, -1, black, 10);

            for (MatOfPoint contour: contours) {
                Imgproc.fillPoly(mask, Arrays.asList(contour), black);
            }

            Mat masked = new Mat();

            srcMat.copyTo(masked, mask);
            Utils.matToBitmap(mask, b);


            imgR.setImageBitmap(b);
        }
if(getIntent().hasExtra(“byteArray”)){
b=BitmapFactory.decodeByteArray(getIntent().getByteArrayExtra(“byteArray”),0,getIntent().getByteArrayExtra(“byteArray”).length;
等高线=新的ArrayList();
srcMat=新的Mat();
灰色=新垫();
matHSV=新材料();
Utils.bitmapToMat(b,srcMat);
Imgproc.CVT颜色(srcMat、灰色、Imgproc.COLOR_RGBA2GRAY);
Imgproc.Canny(灰色,灰色,20,20*3,3,真);
Mat层次结构=新Mat();
Imgproc.findContours(灰色、轮廓、层次、Imgproc.RETR\u外部、Imgproc.CHAIN\u近似\u简单);
用于(int-contourIdx=0;contourIdx
输出:


输入:

找到电池花了2分钟)我为Clarity圈出了它(我在谈论输入照片)我也在输入图片中圈出了电池。