Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> OpenCV實現圖像暗區擴張(腐蝕圖片)

OpenCV實現圖像暗區擴張(腐蝕圖片)

編輯:關於Android編程

效果圖

效果圖

效果圖

源碼

KqwOpenCVBlurDemo

暗區擴張,也叫腐蝕,要實現這樣的效果,我們可以選取一個合適大小的,用被核覆蓋的最小值代替錨點像素。

原始圖像(左)和腐蝕後的圖像(右)

我們首先定義一個合適大小的核

Mat kernelErode = Imgproc.getStructuringElement(Imgproc.MORPH_ELLIPSE, new Size(5, 5));

然後調用Imgproc.erode()方法把圖像的暗區放大

// 擴大暗區(腐蝕)
Imgproc.erode(src, src, kernelErode);

封裝

/**
 * 擴大圖片暗區(腐蝕圖片)
 *
 * @param bitmap 要處理的圖片
 */
public void erode(Bitmap bitmap) {
    // 使用RxJava處理圖片
    if (null != mSubscriber)
        Observable
                .just(bitmap)
                .map(new Func1() {

                    @Override
                    public Bitmap call(Bitmap bitmap) {
                        // Bitmap轉為Mat
                        Mat src = new Mat(bitmap.getHeight(), bitmap.getWidth(), CvType.CV_8UC4);
                        Utils.bitmapToMat(bitmap, src);

                        // 定義一個合適大小的核
                        Mat kernelErode = Imgproc.getStructuringElement(Imgproc.MORPH_ELLIPSE, new Size(5, 5));
                        // 擴大暗區(腐蝕)
                        Imgproc.erode(src, src, kernelErode);

                        // Mat轉Bitmap
                        Bitmap processedImage = Bitmap.createBitmap(src.cols(), src.rows(), Bitmap.Config.ARGB_8888);
                        Utils.matToBitmap(src, processedImage);

                        return processedImage;
                    }
                })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(mSubscriber);
}

調用

// 圖片處理的工具類
mBlurUtil = new BlurUtil(new Subscriber() {
    @Override
    public void onCompleted() {
        // 圖片處理完成
        dismissProgressDialog();
    }

    @Override
    public void onError(Throwable e) {
        // 圖片處理異常
        dismissProgressDialog();
    }

    @Override
    public void onNext(Bitmap bitmap) {
        // 獲取到處理後的圖片
        mIvImageProcessed.setImageBitmap(bitmap);
    }
});

// 擴大圖片暗區
mBlurUtil.erode(mSelectImage);
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved