OpenCV高斯模糊方法

来源:互联网 发布:java 安装包 编辑:程序博客网 时间:2024/06/03 09:13

纯粹阅读,请移步OpenCV高斯模糊方法

效果图

高斯模糊方法

高斯模糊方法

源码

KqwOpenCVBlurDemo

步骤

  1. 将获取到的Bitmap图片转成Mat对象
// Bitmap转为MatMat src = new Mat(bitmap.getHeight(), bitmap.getWidth(), CvType.CV_8UC4);Utils.bitmapToMat(bitmap, src);
  1. 调用OpenCV的高斯模糊方法
// 高斯模糊方法Imgproc.GaussianBlur(src, src, new Size(91, 91), 0);
  1. 将处理完的Mat数据转成Bitmap对象
// Mat转BitmapBitmap processedImage = Bitmap.createBitmap(src.cols(), src.rows(), Bitmap.Config.ARGB_8888);Utils.matToBitmap(src, processedImage);

封装

这里我用到了RxJava。主要是因为图片处理是耗时操作,会阻塞线程,为了防止界面卡顿,这里使用RxJava进行了线程切换。

package kong.qingwei.kqwopencvblurdemo;import android.graphics.Bitmap;import org.opencv.android.Utils;import org.opencv.core.CvType;import org.opencv.core.Mat;import org.opencv.core.Size;import org.opencv.imgproc.Imgproc;import rx.Observable;import rx.Subscriber;import rx.android.schedulers.AndroidSchedulers;import rx.functions.Func1;import rx.schedulers.Schedulers;/** * Created by kqw on 2016/8/17. * 图片虚化的工具类 */public class BlurUtil {    private Subscriber<Bitmap> mSubscriber;    public BlurUtil(Subscriber<Bitmap> subscriber) {        mSubscriber = subscriber;    }    /**     * 高斯模糊方法     *     * @param bitmap 要处理的图片     */    public void gaussianBlur(Bitmap bitmap) {        // RxJava处理图片虚化        if (null != mSubscriber)            Observable                    .just(bitmap)                    .map(new Func1<Bitmap, Bitmap>() {                        @Override                        public Bitmap call(Bitmap bitmap) {                            // Bitmap转为Mat                            Mat src = new Mat(bitmap.getHeight(), bitmap.getWidth(), CvType.CV_8UC4);                            Utils.bitmapToMat(bitmap, src);                            // 高斯模糊方法                            Imgproc.GaussianBlur(src, src, new Size(91, 91), 0);                            // 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<Bitmap>() {    @Override    public void onCompleted() {        // 图片处理完成        dismissProgressDialog();    }    @Override    public void onError(Throwable e) {        // 图片处理异常        dismissProgressDialog();    }    @Override    public void onNext(Bitmap bitmap) {        // 获取到处理后的图片        mIvImageProcessed.setImageBitmap(bitmap);    }});

图片模糊处理

// 高斯模糊算法处理图片mBlurUtil.gaussianBlur(mSelectImage);
0 0
原创粉丝点击