Opencv Android:如何从阈值输出中去除黑色背景



我使用OpenCV安卓库阈值方法进行图像分割,但问题是输出位图包含黑色背景,我不想要。请注意,原始图像没有任何黑色背景,实际上是白色的。我附上了代码供您参考,我是opencv的新手,对它没有太多了解,所以请帮助我。

private void Segmentation() {
Mat srcMat = new Mat();
gray = new Mat();
Utils.bitmapToMat(imageBmp, srcMat);
Imgproc.cvtColor(srcMat, gray, Imgproc.COLOR_RGBA2GRAY);
grayBmp = Bitmap.createBitmap(imageBmp.getWidth(), imageBmp.getHeight(), Bitmap.Config.RGB_565);
Utils.matToBitmap(gray, grayBmp);
grayscaleHistogram();
Mat threshold = new Mat();
Imgproc.threshold(gray, threshold, 0, 255, Imgproc.THRESH_BINARY_INV + Imgproc.THRESH_OTSU);
thresBmp = Bitmap.createBitmap(imageBmp.getWidth(), imageBmp.getHeight(), Bitmap.Config.RGB_565);
Utils.matToBitmap(threshold, thresBmp);
Mat closing = new Mat();
Mat kernel = Mat.ones(5, 5, CvType.CV_8U);
Imgproc.morphologyEx(threshold, closing, Imgproc.MORPH_CLOSE, kernel, new Point(-1, -1), 3);
closingBmp = Bitmap.createBitmap(imageBmp.getWidth(), imageBmp.getHeight(), Bitmap.Config.RGB_565);
Utils.matToBitmap(closing, closingBmp);
result = new Mat();
Core.subtract(closing, gray, result);
Core.subtract(closing, result, result);

resultBmp = Bitmap.createBitmap(imageBmp.getWidth(), imageBmp.getHeight(), Bitmap.Config.RGB_565);
Utils.matToBitmap(result, resultBmp);
Glide.with(ResultActivity.this).asBitmap().load(resultBmp).into(ivAfter);
}

在此处输入图像描述

那么你到底希望它是什么?二进制阈值的工作原理如下:

if value < threshold:
value = 0
else:
value = 1

当然,你可以将其转换为灰度/RGB图像,并根据自己的喜好调整背景。您也可以使用~操作符反转图像(白色背景、黑色分割(。

segmented_image = ~ segmented_image

编辑:OpenCV有一个专用的标志来反转结果:CV_THRESH_BINARY_INV您已经在使用它了,也许可以尝试将其更改为CV_THRESH_BINARY

最新更新