Android和Java通性之OpenCV(图像处理综合)

12 篇文章 0 订阅

Android和Java通性之OpenCV(图像处理综合)

OpenCV大部分代码是用C写的,包括算法,只有部分是用Java写的,也是一个跨平台的计算机视觉库。

在这篇博客主要是看Java实现的那部分,如果要实现比较特殊的,或者自己实现算法,就得用JNI Java调用C来实现。

当然大部分Java实现的算法也是通过调用C实现的,但是大部分C没有做Java封装。

Android OpenCV项目结构:

 

以下是Android OpenCV图像处理和操作的综合代码:

原图:

         /**

         *ROI区域定义方法一:imageROI

         */

        Rect rect = new Rect(30, 120, 340, 350); // 设置矩形ROI的位置

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);

        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(340, 350, Bitmap.Config.ARGB_8888);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        Mat imgRectROI= new Mat(baseMat, rect);

        Utils.matToBitmap(imgRectROI, processBitmap,true);

        processView.setImageBitmap(processBitmap);

        baseMat.release();

        baseBitmap.recycle();

结果图:

 /**

         *ROI区域定义方法二:addWeighted

         */

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);

        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Bitmap baseIcon= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);

        processMat =new Mat(baseBitmap.getWidth(), baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        Utils.bitmapToMat(baseIcon,processMat,true);

        Mat myProcessMat =new Mat(baseBitmap.getWidth(), baseBitmap.getHeight(), CvType.CV_8UC4);

        System.out.println("图片融合开始!");

        //图片融合

        if (baseMat.rows() == processMat.rows() && baseMat.cols() == processMat.cols() && baseMat.type() == processMat.type()) {

            Core.addWeighted(baseMat, 0.3, processMat, 0.3, 0, myProcessMat);

            System.out.println("图片融合成功!");

        }

        Utils.matToBitmap(myProcessMat, processBitmap,true);

        processView1.setImageBitmap(processBitmap);

        baseMat.release();

        processMat.release();

        myProcessMat.release();

        baseBitmap.recycle();

        baseIcon.recycle();

结果图:

 /**

         * 分离通道

         */

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);

        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);

        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        List<Mat> mymv = new ArrayList<Mat>();

        Core.split(baseMat,mymv);

        //for(int i=0;i<mymv.size();i++){

        processMat=mymv.get(0);

       // }

        Utils.matToBitmap(processMat, processBitmap,true);

        processView2.setImageBitmap(processBitmap);

        baseMat.release();

        processMat.release();

        baseBitmap.recycle();

结果图:

/**

         *  合并split()方法分离出来的通道

         */

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);

        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);

        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        List<Mat> mv = new ArrayList<Mat>();

        Core.split(baseMat,mv);

        Core.merge(mv, processMat);// 合并split()方法分离出来的彩色通道数据

        Utils.matToBitmap(processMat, processBitmap,true);

        processView3.setImageBitmap(processBitmap);

        baseMat.release();

        processMat.release();

        baseBitmap.recycle();

结果图:

 /**

         * 灰度处理

         */

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);

        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);

        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        Imgproc.cvtColor(baseMat, processMat,Imgproc.COLOR_BGR2RGB,4);

        Utils.matToBitmap(processMat, processBitmap,true);

        processView4.setImageBitmap(processBitmap);

        baseMat.release();

        processMat.release();

        baseBitmap.recycle();

结果图:

    /**

         *均值滤波

         */

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);

        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);

        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        Imgproc.blur(baseMat, processMat, new Size(15, 15), new Point(-1, -1), Core.BORDER_DEFAULT);

        Utils.matToBitmap(processMat, processBitmap,true);

        processView5.setImageBitmap(processBitmap);

        baseMat.release();

        processMat.release();

        baseBitmap.recycle();

结果图:

 /**

         *方框滤波

         */

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);

        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);

        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        Imgproc.boxFilter(baseMat, processMat,-1, new Size(15, 15), new Point(-1, -1));

        Utils.matToBitmap(processMat, processBitmap,true);

        processView6.setImageBitmap(processBitmap);

        baseMat.release();

        processMat.release();

        baseBitmap.recycle();

结果图:

  /**

         *高斯滤波

         */

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);

        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);

        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        Imgproc.GaussianBlur(baseMat, processMat, new Size(15, 15),0,0);

        Utils.matToBitmap(processMat, processBitmap,true);

        processView7.setImageBitmap(processBitmap);

        baseMat.release();

        processMat.release();

        baseBitmap.recycle();

结果图:

  /**

         *中值滤波

         */

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);

        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);

        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        Imgproc.medianBlur(baseMat, processMat,3);

        Utils.matToBitmap(processMat, processBitmap,true);

        processView8.setImageBitmap(processBitmap);

        baseMat.release();

        processMat.release();

        baseBitmap.recycle();

结果图:

  /**

         *双边滤波

         */

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);

        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);

        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        Imgproc.cvtColor(baseMat,baseMat,Imgproc.COLOR_BGR2RGB);

        Imgproc.bilateralFilter(baseMat, processMat,25, 25 * 2, 25 / 2);

        Utils.matToBitmap(processMat, processBitmap,true);

        processView9.setImageBitmap(processBitmap);

        baseMat.release();

        processMat.release();

        baseBitmap.recycle();

结果图:

 /**

         *腐蚀

         */

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);

        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);

        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        //设置内核形状和内核大小

        kernel=Imgproc.getStructuringElement(Imgproc.CV_SHAPE_RECT,new Size(11,11),new Point(5,5));

        Imgproc.erode(baseMat,processMat,kernel);

        Utils.matToBitmap(processMat, processBitmap,true);

        processView10.setImageBitmap(processBitmap);

        baseMat.release();

        processMat.release();

        baseBitmap.recycle();

        kernel.release();

结果图:

/**

         *膨胀

         */

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);

        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);

        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        //设置内核形状和内核大小

        kernel=Imgproc.getStructuringElement(Imgproc.CV_SHAPE_RECT,new Size(11,11),new Point(5,5));

        Imgproc.dilate(baseMat,processMat,kernel);

 

        Utils.matToBitmap(processMat, processBitmap,true);

        processView11.setImageBitmap(processBitmap);

        baseMat.release();

        processMat.release();

        baseBitmap.recycle();

        kernel.release();

结果图:

 /**

         * 开运算

         */

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);

        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);

        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        //设置内核形状和内核大小

        kernel=Imgproc.getStructuringElement(Imgproc.CV_SHAPE_RECT,new Size(11,11),new Point(5,5));

        Imgproc.morphologyEx(baseMat,processMat,Imgproc.MORPH_OPEN,kernel);

        Utils.matToBitmap(processMat, processBitmap,true);

        processView12.setImageBitmap(processBitmap);

        baseMat.release();

        processMat.release();

        baseBitmap.recycle();

        kernel.release();

结果图:

 /**

         * 闭运算

         */

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);

        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);

        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        //设置内核形状和内核大小

        kernel=Imgproc.getStructuringElement(Imgproc.CV_SHAPE_RECT,new Size(11,11),new Point(5,5));

        Imgproc.morphologyEx(baseMat,processMat,Imgproc.MORPH_CLOSE,kernel);

        Utils.matToBitmap(processMat, processBitmap,true);

        processView13.setImageBitmap(processBitmap);

        baseMat.release();

        processMat.release();

        baseBitmap.recycle();

        kernel.release();

结果图:

 /**

         * 形象学梯度

         */

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);

        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.RGB_565);

        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        //设置内核形状和内核大小

        kernel=Imgproc.getStructuringElement(Imgproc.CV_SHAPE_RECT,new Size(11,11),new Point(5,5));

        Imgproc.morphologyEx(baseMat,processMat,Imgproc.MORPH_GRADIENT,kernel);

        Utils.matToBitmap(processMat, processBitmap,true);

        processView14.setImageBitmap(processBitmap);

        baseMat.release();

        processMat.release();

        baseBitmap.recycle();

        kernel.release();

结果图:

 /**

         * 顶帽

         */

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);

        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.RGB_565);

        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        //设置内核形状和内核大小

        kernel=Imgproc.getStructuringElement(Imgproc.CV_SHAPE_RECT,new Size(11,11),new Point(5,5));

        Imgproc.morphologyEx(baseMat,processMat,Imgproc.MORPH_TOPHAT,kernel);

        Utils.matToBitmap(processMat, processBitmap,true);

        processView15.setImageBitmap(processBitmap);

        baseMat.release();

        processMat.release();

        baseBitmap.recycle();

        kernel.release();

结果图:

/**

         * 黑帽

         */

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);

        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.RGB_565);

        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        //设置内核形状和内核大小

        kernel=Imgproc.getStructuringElement(Imgproc.CV_SHAPE_RECT,new Size(11,11),new Point(5,5));

        Imgproc.morphologyEx(baseMat,processMat,Imgproc.MORPH_BLACKHAT,kernel);

        Utils.matToBitmap(processMat, processBitmap,true);

        processView16.setImageBitmap(processBitmap);

        baseMat.release();

        processMat.release();

        baseBitmap.recycle();

        kernel.release();

结果图:

 

 /**

         * Canny边缘检测

         */

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);

        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);

        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        Imgproc.Canny(baseMat,processMat,150,250);

        Utils.matToBitmap(processMat, processBitmap,true);

        processView17.setImageBitmap(processBitmap);

        baseMat.release();

        processMat.release();

        baseBitmap.recycle();

结果图:

 /**

         * Sobel边缘检测

         */

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);

        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.RGB_565);

        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        Mat grad_x=new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Mat grad_y=new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Mat abs_grad_x=new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Mat abs_grad_y=new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Imgproc.Sobel(baseMat,grad_x,CvType.CV_16S, 1, 0, 0);

        Core.convertScaleAbs(grad_x, abs_grad_x);

        Imgproc.Sobel(baseMat,grad_y,CvType.CV_16S, 0, 1, 0);

        Core.convertScaleAbs(grad_y, abs_grad_y);

        Core.addWeighted( abs_grad_x, 0.5, abs_grad_y, 0.5, 0, processMat );

        Utils.matToBitmap(processMat, processBitmap,true);

        processView18.setImageBitmap(processBitmap);

        baseMat.release();

        processMat.release();

        baseBitmap.recycle();

        grad_x.release();

        grad_y.release();

        abs_grad_x.release();

        abs_grad_y.release();

结果图:

        /**

         * Scharr边缘检测

         */

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);

        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.RGB_565);

        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        Mat grad_x1=new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Mat grad_y1=new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Mat abs_grad_x1=new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Mat abs_grad_y1=new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Imgproc.Scharr(baseMat,grad_x1,CvType.CV_16S, 1, 0, 0);

        Core.convertScaleAbs(grad_x1, abs_grad_x1);

        Imgproc.Scharr(baseMat,grad_y1,CvType.CV_16S, 0, 1, 0);

        Core.convertScaleAbs(grad_y1, abs_grad_y1);

        Core.addWeighted( abs_grad_x1, 0.5, abs_grad_y1, 0.5, 0, processMat );

        Utils.matToBitmap(abs_grad_y1, processBitmap,true);

        processView19.setImageBitmap(processBitmap);

        baseMat.release();

        processMat.release();

        baseBitmap.recycle();

        grad_x1.release();

        grad_y1.release();

        abs_grad_x1.release();

        abs_grad_y1.release();

结果图:

          /**

         * Laplace边缘检测

         */

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);

        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.RGB_565);

        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        Mat laplacianmat=new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Imgproc.Laplacian(baseMat,laplacianmat,CvType.CV_16S, 3, 1, 0);

        Core.convertScaleAbs(laplacianmat, processMat);

        Utils.matToBitmap(processMat, processBitmap,true);

        processView20.setImageBitmap(processBitmap);

        baseMat.release();

        processMat.release();

        baseBitmap.recycle();

结果图:

 

以下是类的完整代码,导入项目中可以直接运行:

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;

import org.opencv.android.Utils;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.imgproc.Imgproc;

import java.util.ArrayList;
import java.util.List;

public class BaseImageProcessActivity extends AppCompatActivity {


    private ImageView baseprocessView=null;
    private ImageView processView =null;
    private ImageView processView1=null;
    private ImageView processView2 =null;
    private ImageView processView3 =null;
    private ImageView processView4=null;
    private ImageView processView5=null;
    private ImageView processView6 =null;
    private ImageView processView7 =null;
    private ImageView processView8 =null;
    private ImageView processView9 =null;
    private ImageView processView10 =null;
    private ImageView processView11 =null;

    private ImageView processView12 =null;
    private ImageView processView13 =null;
    private ImageView processView14 =null;
    private ImageView processView15 =null;
    private ImageView processView16 =null;

    private ImageView processView17 =null;
    private ImageView processView18 =null;
    private ImageView processView19 =null;
    private ImageView processView20 =null;



    Bitmap baseBitmap=null;
    Mat baseMat=null;

    Bitmap processBitmap =null;
    Mat processMat =null;

    Mat kernel=null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.base_image_process);

        baseprocessView=(ImageView)findViewById(R.id.baseprocessView);
        processView =(ImageView)findViewById(R.id.processView);
        processView1=(ImageView)findViewById(R.id.processView1);
        processView2 =(ImageView)findViewById(R.id.processView2);
        processView3 =(ImageView)findViewById(R.id.processView3);
        processView4=(ImageView)findViewById(R.id.processView4);
        processView5=(ImageView)findViewById(R.id.processView5);
        processView6 =(ImageView)findViewById(R.id.processView6);
        processView7 =(ImageView)findViewById(R.id.processView7);
        processView8 =(ImageView)findViewById(R.id.processView8);
        processView9 =(ImageView)findViewById(R.id.processView9);
        processView10 =(ImageView)findViewById(R.id.processView10);
        processView11 =(ImageView)findViewById(R.id.processView11);

        processView12 =(ImageView)findViewById(R.id.processView12);
        processView13 =(ImageView)findViewById(R.id.processView13);
        processView14 =(ImageView)findViewById(R.id.processView14);
        processView15 =(ImageView)findViewById(R.id.processView15);
        processView16 =(ImageView)findViewById(R.id.processView16);


        processView17 =(ImageView)findViewById(R.id.processView17);
        processView18 =(ImageView)findViewById(R.id.processView18);
        processView19 =(ImageView)findViewById(R.id.processView19);
        processView20 =(ImageView)findViewById(R.id.processView20);

        /**
         * 原图
         */
        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);
        baseprocessView.setImageBitmap(baseBitmap);

        /**
         *ROI区域定义方法一:imageROI
         */

        Rect rect = new Rect(30, 120, 340, 350); // 设置矩形ROI的位置

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);
        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(340, 350, Bitmap.Config.ARGB_8888);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        Mat imgRectROI= new Mat(baseMat, rect);

        Utils.matToBitmap(imgRectROI, processBitmap,true);
        processView.setImageBitmap(processBitmap);
        baseMat.release();
        baseBitmap.recycle();

        /**
         *ROI区域定义方法二:addWeighted
         */

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);
        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Bitmap baseIcon= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);
        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);
        processMat =new Mat(baseBitmap.getWidth(), baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);
        Utils.bitmapToMat(baseIcon,processMat,true);

        Mat myProcessMat =new Mat(baseBitmap.getWidth(), baseBitmap.getHeight(), CvType.CV_8UC4);

        System.out.println("图片融合开始!");
        //图片融合
        if (baseMat.rows() == processMat.rows() && baseMat.cols() == processMat.cols() && baseMat.type() == processMat.type()) {
            Core.addWeighted(baseMat, 0.3, processMat, 0.3, 0, myProcessMat);
            System.out.println("图片融合成功!");
        }
        Utils.matToBitmap(myProcessMat, processBitmap,true);
        processView1.setImageBitmap(processBitmap);
        baseMat.release();
        processMat.release();
        myProcessMat.release();
        baseBitmap.recycle();
        baseIcon.recycle();

        /**
         * 分离通道
         */

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);
        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);
        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        List<Mat> mymv = new ArrayList<Mat>();

        Core.split(baseMat,mymv);

        //for(int i=0;i<mymv.size();i++){
        processMat=mymv.get(0);
       // }
        Utils.matToBitmap(processMat, processBitmap,true);
        processView2.setImageBitmap(processBitmap);
        baseMat.release();
        processMat.release();
        baseBitmap.recycle();



        /**
         *  合并split()方法分离出来的通道
         */

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);
        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);
        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        List<Mat> mv = new ArrayList<Mat>();

        Core.split(baseMat,mv);

        Core.merge(mv, processMat);// 合并split()方法分离出来的彩色通道数据

        Utils.matToBitmap(processMat, processBitmap,true);
        processView3.setImageBitmap(processBitmap);
        baseMat.release();
        processMat.release();
        baseBitmap.recycle();
        /**
         * 灰度处理
         */
        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);
        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);
        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        Imgproc.cvtColor(baseMat, processMat,Imgproc.COLOR_BGR2RGB,4);
        Utils.matToBitmap(processMat, processBitmap,true);
        processView4.setImageBitmap(processBitmap);
        baseMat.release();
        processMat.release();
        baseBitmap.recycle();

        /**
         *均值滤波
         */
        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);
        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);
        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        Imgproc.blur(baseMat, processMat, new Size(15, 15), new Point(-1, -1), Core.BORDER_DEFAULT);
        Utils.matToBitmap(processMat, processBitmap,true);
        processView5.setImageBitmap(processBitmap);
        baseMat.release();
        processMat.release();
        baseBitmap.recycle();
        /**
         *方框滤波
         */

        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);
        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);
        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        Imgproc.boxFilter(baseMat, processMat,-1, new Size(15, 15), new Point(-1, -1));
        Utils.matToBitmap(processMat, processBitmap,true);
        processView6.setImageBitmap(processBitmap);
        baseMat.release();
        processMat.release();
        baseBitmap.recycle();
        /**
         *高斯滤波
         */
        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);
        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);
        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        Imgproc.GaussianBlur(baseMat, processMat, new Size(15, 15),0,0);
        Utils.matToBitmap(processMat, processBitmap,true);
        processView7.setImageBitmap(processBitmap);
        baseMat.release();
        processMat.release();
        baseBitmap.recycle();
        /**
         *中值滤波
         */
        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);
        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);
        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        Imgproc.medianBlur(baseMat, processMat,3);
        Utils.matToBitmap(processMat, processBitmap,true);
        processView8.setImageBitmap(processBitmap);
        baseMat.release();
        processMat.release();
        baseBitmap.recycle();
        /**
         *双边滤波
         */
        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);
        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);
        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        Imgproc.cvtColor(baseMat,baseMat,Imgproc.COLOR_BGR2RGB);
        Imgproc.bilateralFilter(baseMat, processMat,25, 25 * 2, 25 / 2);

        Utils.matToBitmap(processMat, processBitmap,true);
        processView9.setImageBitmap(processBitmap);
        baseMat.release();
        processMat.release();
        baseBitmap.recycle();
        /**
         *腐蚀
         */
        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);
        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);
        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        //设置内核形状和内核大小
        kernel=Imgproc.getStructuringElement(Imgproc.CV_SHAPE_RECT,new Size(11,11),new Point(5,5));
        Imgproc.erode(baseMat,processMat,kernel);

        Utils.matToBitmap(processMat, processBitmap,true);
        processView10.setImageBitmap(processBitmap);
        baseMat.release();
        processMat.release();
        baseBitmap.recycle();
        kernel.release();
        /**
         *膨胀
         */
        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);
        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);
        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        //设置内核形状和内核大小
        kernel=Imgproc.getStructuringElement(Imgproc.CV_SHAPE_RECT,new Size(11,11),new Point(5,5));
        Imgproc.dilate(baseMat,processMat,kernel);

        Utils.matToBitmap(processMat, processBitmap,true);
        processView11.setImageBitmap(processBitmap);
        baseMat.release();
        processMat.release();
        baseBitmap.recycle();
        kernel.release();

        /**
         * 开运算
         */
        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);
        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);
        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        //设置内核形状和内核大小
        kernel=Imgproc.getStructuringElement(Imgproc.CV_SHAPE_RECT,new Size(11,11),new Point(5,5));

        Imgproc.morphologyEx(baseMat,processMat,Imgproc.MORPH_OPEN,kernel);

        Utils.matToBitmap(processMat, processBitmap,true);
        processView12.setImageBitmap(processBitmap);
        baseMat.release();
        processMat.release();
        baseBitmap.recycle();
        kernel.release();

        /**
         * 闭运算
         */
        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);
        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);
        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);
        //设置内核形状和内核大小
        kernel=Imgproc.getStructuringElement(Imgproc.CV_SHAPE_RECT,new Size(11,11),new Point(5,5));

        Imgproc.morphologyEx(baseMat,processMat,Imgproc.MORPH_CLOSE,kernel);

        Utils.matToBitmap(processMat, processBitmap,true);
        processView13.setImageBitmap(processBitmap);
        baseMat.release();
        processMat.release();
        baseBitmap.recycle();
        kernel.release();

        /**
         * 形象学梯度
         */
        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);
        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.RGB_565);
        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        //设置内核形状和内核大小
        kernel=Imgproc.getStructuringElement(Imgproc.CV_SHAPE_RECT,new Size(11,11),new Point(5,5));

        Imgproc.morphologyEx(baseMat,processMat,Imgproc.MORPH_GRADIENT,kernel);

        Utils.matToBitmap(processMat, processBitmap,true);

        processView14.setImageBitmap(processBitmap);
        baseMat.release();
        processMat.release();
        baseBitmap.recycle();
        kernel.release();

        /**
         * 顶帽
         */
        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);
        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.RGB_565);
        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);
        //设置内核形状和内核大小
        kernel=Imgproc.getStructuringElement(Imgproc.CV_SHAPE_RECT,new Size(11,11),new Point(5,5));

        Imgproc.morphologyEx(baseMat,processMat,Imgproc.MORPH_TOPHAT,kernel);

        Utils.matToBitmap(processMat, processBitmap,true);
        processView15.setImageBitmap(processBitmap);
        baseMat.release();
        processMat.release();
        baseBitmap.recycle();
        kernel.release();

        /**
         * 黑帽
         */
        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);
        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.RGB_565);
        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);
        //设置内核形状和内核大小
        kernel=Imgproc.getStructuringElement(Imgproc.CV_SHAPE_RECT,new Size(11,11),new Point(5,5));

        Imgproc.morphologyEx(baseMat,processMat,Imgproc.MORPH_BLACKHAT,kernel);

        Utils.matToBitmap(processMat, processBitmap,true);
        processView16.setImageBitmap(processBitmap);
        baseMat.release();
        processMat.release();
        baseBitmap.recycle();
        kernel.release();

        /**
         * Canny边缘检测
         */
        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);
        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.ARGB_8888);
        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        Imgproc.Canny(baseMat,processMat,150,250);

        Utils.matToBitmap(processMat, processBitmap,true);
        processView17.setImageBitmap(processBitmap);
        baseMat.release();
        processMat.release();
        baseBitmap.recycle();

        /**
         * Sobel边缘检测
         */
        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);
        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.RGB_565);
        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        Mat grad_x=new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);
        Mat grad_y=new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);
        Mat abs_grad_x=new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);
        Mat abs_grad_y=new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);


        Imgproc.Sobel(baseMat,grad_x,CvType.CV_16S, 1, 0, 0);
        Core.convertScaleAbs(grad_x, abs_grad_x);

        Imgproc.Sobel(baseMat,grad_y,CvType.CV_16S, 0, 1, 0);
        Core.convertScaleAbs(grad_y, abs_grad_y);

        Core.addWeighted( abs_grad_x, 0.5, abs_grad_y, 0.5, 0, processMat );
        //Imgproc.Canny(baseMat,processMat,150,250);

        Utils.matToBitmap(processMat, processBitmap,true);
        processView18.setImageBitmap(processBitmap);
        baseMat.release();
        processMat.release();
        baseBitmap.recycle();
        grad_x.release();
        grad_y.release();
        abs_grad_x.release();
        abs_grad_y.release();
        /**
         * Scharr边缘检测
         */
        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);
        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.RGB_565);
        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        Mat grad_x1=new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);
        Mat grad_y1=new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);
        Mat abs_grad_x1=new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);
        Mat abs_grad_y1=new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);


        Imgproc.Scharr(baseMat,grad_x1,CvType.CV_16S, 1, 0, 0);
        Core.convertScaleAbs(grad_x1, abs_grad_x1);

        Imgproc.Scharr(baseMat,grad_y1,CvType.CV_16S, 0, 1, 0);
        Core.convertScaleAbs(grad_y1, abs_grad_y1);

        Core.addWeighted( abs_grad_x1, 0.5, abs_grad_y1, 0.5, 0, processMat );

        Utils.matToBitmap(abs_grad_y1, processBitmap,true);
        processView19.setImageBitmap(processBitmap);
        baseMat.release();
        processMat.release();
        baseBitmap.recycle();
        grad_x1.release();
        grad_y1.release();
        abs_grad_x1.release();
        abs_grad_y1.release();
        /**
         * Laplace边缘检测
         */
        baseBitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.test);
        baseMat=new Mat(baseBitmap.getWidth(),baseBitmap.getHeight(), CvType.CV_8UC4);

        processBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), Bitmap.Config.RGB_565);
        processMat =new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC4);

        Utils.bitmapToMat(baseBitmap,baseMat,true);

        Mat laplacianmat=new Mat(processBitmap.getWidth(), processBitmap.getHeight(), CvType.CV_8UC1|CvType.CV_8UC3|CvType.CV_8UC4);

        Imgproc.Laplacian(baseMat,laplacianmat,CvType.CV_16S, 3, 1, 0);
        Core.convertScaleAbs(laplacianmat, processMat);

        Utils.matToBitmap(processMat, processBitmap,true);
        processView20.setImageBitmap(processBitmap);
        baseMat.release();
        processMat.release();
        baseBitmap.recycle();

    }
}

base_image_process.xml的代码:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                android:paddingTop="20dp"
                >

                <ImageView
                    android:id="@+id/baseprocessView"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    ></ImageView>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/baseprocessView"
                    android:layout_centerHorizontal="true"
                    android:text="【原图】"
                    android:textSize="20sp"
                    android:textColor="@android:color/holo_red_dark"
                    />

            </RelativeLayout>

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintLeft_toLeftOf="parent"
                    app:layout_constraintRight_toRightOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    android:paddingTop="20dp"
                    >

                    <ImageView
                        android:id="@+id/processView"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                    ></ImageView>

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_below="@+id/processView"
                        android:layout_centerHorizontal="true"
                        android:text="【图像处理:imageROI】"
                        android:textSize="20sp"
                        android:textColor="@android:color/holo_red_dark"
                        />

                </RelativeLayout>

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintLeft_toLeftOf="parent"
                    app:layout_constraintRight_toRightOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    android:paddingTop="20dp"
                    >

                    <ImageView
                        android:id="@+id/processView1"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        ></ImageView>

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_below="@+id/processView1"
                        android:layout_centerHorizontal="true"
                        android:text="【图像处理:addWeighted】"
                        android:textSize="20sp"
                        android:textColor="@android:color/holo_red_dark"
                        />

                </RelativeLayout>

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintLeft_toLeftOf="parent"
                    app:layout_constraintRight_toRightOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    android:paddingTop="20dp"
                    >

                    <ImageView
                        android:id="@+id/processView2"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        ></ImageView>

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_below="@+id/processView2"
                        android:layout_centerHorizontal="true"
                        android:text="【图像处理:分离通道】"
                        android:textSize="20sp"
                        android:textColor="@android:color/holo_red_dark"
                        />

                </RelativeLayout>

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintLeft_toLeftOf="parent"
                    app:layout_constraintRight_toRightOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    android:paddingTop="20dp"
                    >

                    <ImageView
                        android:id="@+id/processView3"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        ></ImageView>

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_below="@+id/processView3"
                        android:layout_centerHorizontal="true"
                        android:text="【图像处理:合并通道】"
                        android:textSize="20sp"
                        android:textColor="@android:color/holo_red_dark"
                        />

                </RelativeLayout>

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintLeft_toLeftOf="parent"
                    app:layout_constraintRight_toRightOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    android:paddingTop="20dp"
                    >

                    <ImageView
                        android:id="@+id/processView4"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        ></ImageView>

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_below="@+id/processView4"
                        android:layout_centerHorizontal="true"
                        android:text="【图像处理:灰度处理】"
                        android:textSize="20sp"
                        android:textColor="@android:color/holo_red_dark"
                        />

                </RelativeLayout>

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintLeft_toLeftOf="parent"
                    app:layout_constraintRight_toRightOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    android:paddingTop="20dp"
                    >

                    <ImageView
                        android:id="@+id/processView5"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        ></ImageView>

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_below="@+id/processView5"
                        android:layout_centerHorizontal="true"
                        android:text="【图像处理:均值滤波】"
                        android:textSize="20sp"
                        android:textColor="@android:color/holo_red_dark"
                        />

                </RelativeLayout>

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintLeft_toLeftOf="parent"
                    app:layout_constraintRight_toRightOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    android:paddingTop="20dp"
                    >

                    <ImageView
                        android:id="@+id/processView6"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        ></ImageView>

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_below="@+id/processView6"
                        android:layout_centerHorizontal="true"
                        android:text="【图像处理:方框滤波】"
                        android:textSize="20sp"
                        android:textColor="@android:color/holo_red_dark"
                        />

                </RelativeLayout>
                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintLeft_toLeftOf="parent"
                    app:layout_constraintRight_toRightOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    android:paddingTop="20dp"
                    >

                    <ImageView
                        android:id="@+id/processView7"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        ></ImageView>

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_below="@+id/processView7"
                        android:layout_centerHorizontal="true"
                        android:text="【图像处理:高斯滤波】"
                        android:textSize="20sp"
                        android:textColor="@android:color/holo_red_dark"
                        />

                </RelativeLayout>
                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintLeft_toLeftOf="parent"
                    app:layout_constraintRight_toRightOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    android:paddingTop="20dp"
                    >

                    <ImageView
                        android:id="@+id/processView8"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        ></ImageView>

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_below="@+id/processView8"
                        android:layout_centerHorizontal="true"
                        android:text="【图像处理:中值滤波】"
                        android:textSize="20sp"
                        android:textColor="@android:color/holo_red_dark"
                        />

                </RelativeLayout>

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                android:paddingTop="20dp"
                >

                <ImageView
                    android:id="@+id/processView9"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    ></ImageView>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/processView9"
                    android:layout_centerHorizontal="true"
                    android:text="【图像处理:双边滤波】"
                    android:textSize="20sp"
                    android:textColor="@android:color/holo_red_dark"
                    />

            </RelativeLayout>

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                android:paddingTop="20dp"
                >

                <ImageView
                    android:id="@+id/processView10"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    ></ImageView>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/processView10"
                    android:layout_centerHorizontal="true"
                    android:text="【图像处理:腐蚀】"
                    android:textSize="20sp"
                    android:textColor="@android:color/holo_red_dark"
                    />

            </RelativeLayout>

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                android:paddingTop="20dp"
                >

                <ImageView
                    android:id="@+id/processView11"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    ></ImageView>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/processView11"
                    android:layout_centerHorizontal="true"
                    android:text="【图像处理:膨胀】"
                    android:textSize="20sp"
                    android:textColor="@android:color/holo_red_dark"
                    />

            </RelativeLayout>

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                android:paddingTop="20dp"
                >

                <ImageView
                    android:id="@+id/processView12"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    ></ImageView>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/processView12"
                    android:layout_centerHorizontal="true"
                    android:text="【图像处理:开运算】"
                    android:textSize="20sp"
                    android:textColor="@android:color/holo_red_dark"
                    />

            </RelativeLayout>

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                android:paddingTop="20dp"
                >

                <ImageView
                    android:id="@+id/processView13"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    ></ImageView>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/processView13"
                    android:layout_centerHorizontal="true"
                    android:text="【图像处理:闭运算】"
                    android:textSize="20sp"
                    android:textColor="@android:color/holo_red_dark"
                    />

            </RelativeLayout>

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                android:paddingTop="20dp"
                >

                <ImageView
                    android:id="@+id/processView14"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    ></ImageView>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/processView14"
                    android:layout_centerHorizontal="true"
                    android:text="【图像处理:形象学梯度】"
                    android:textSize="20sp"
                    android:textColor="@android:color/holo_red_dark"
                    />

            </RelativeLayout>

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                android:paddingTop="20dp"
                >

                <ImageView
                    android:id="@+id/processView15"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    ></ImageView>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/processView15"
                    android:layout_centerHorizontal="true"
                    android:text="【图像处理:顶帽】"
                    android:textSize="20sp"
                    android:textColor="@android:color/holo_red_dark"
                    />

            </RelativeLayout>

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                android:paddingTop="20dp"
                >

                <ImageView
                    android:id="@+id/processView16"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    ></ImageView>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/processView16"
                    android:layout_centerHorizontal="true"
                    android:text="【图像处理:黑帽】"
                    android:textSize="20sp"
                    android:textColor="@android:color/holo_red_dark"
                    />

            </RelativeLayout>

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                android:paddingTop="20dp"
                >

                <ImageView
                    android:id="@+id/processView17"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    ></ImageView>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/processView17"
                    android:layout_centerHorizontal="true"
                    android:text="【图像处理:Canny边缘检测】"
                    android:textSize="20sp"
                    android:textColor="@android:color/holo_red_dark"
                    />

            </RelativeLayout>

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                android:paddingTop="20dp"
                >

                <ImageView
                    android:id="@+id/processView18"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    ></ImageView>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/processView18"
                    android:layout_centerHorizontal="true"
                    android:text="【图像处理:Sobel边缘检测】"
                    android:textSize="20sp"
                    android:textColor="@android:color/holo_red_dark"
                    />

            </RelativeLayout>

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                android:paddingTop="20dp"
                >

                <ImageView
                    android:id="@+id/processView19"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    ></ImageView>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/processView19"
                    android:layout_centerHorizontal="true"
                    android:text="【图像处理:Scharr边缘检测】"
                    android:textSize="20sp"
                    android:textColor="@android:color/holo_red_dark"
                    />

            </RelativeLayout>

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                android:paddingTop="20dp"
                >

                <ImageView
                    android:id="@+id/processView20"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    ></ImageView>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/processView20"
                    android:layout_centerHorizontal="true"
                    android:text="【图像处理:Laplace边缘检测】"
                    android:textSize="20sp"
                    android:textColor="@android:color/holo_red_dark"
                    />

            </RelativeLayout>


        </LinearLayout>
</ScrollView>

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Frank浩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值