java 删除已画出的线_OpenCV,Android:删除背景线条只绘制对象

我试图只检测,绘制和填充/着色电池黑色,同时填充其他所有白色,但我也从背景中获得其他线条 . 我该如何解决这个问题?

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

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

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);

}

输出:

fad76725-0031-4f77-972c-fb72a7fedad2.jpg

输入:

b2a6f629-e221-402d-95b4-237698ab1e50.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值