0

画像のセグメンテーションに OpenCV Android ライブラリのしきい値処理方法を使用していますが、問題は、出力ビットマップに不要な黒い背景が含まれていることです。元の画像には黒い背景がなく、実際には白であることに注意してください。参照用にコードを添付しています。私は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);
}

ここに画像の説明を入力

4

1 に答える 1