Android 文档去阴影

在这里插入图片描述在这里插入图片描述
原图结果
Mat mat4=new Mat();
Mat mat_src=new Mat();
Utils.bitmapToMat(currentBitmap, mat4); //currentBitmap是当前页面中的一个ImageView,需要将其转为Mat类
Utils.bitmapToMat(currentBitmap, mat_src);
Mat element = getStructuringElement(MORPH_RECT, new Size(11,11));//获取卷积核
//下面两个可以合成一个,这里我把它拆分开来了
morphologyEx(mat4,mat4,MORPH_DILATE,element, new Point(-1,-1),1);//膨胀
morphologyEx(mat4,mat4,MORPH_ERODE,element, new Point(-1,-1),1);//腐蚀
mat4=matOperation.minusRGBMat(mat4,mat_src);//这个是我自己写的图像减法操作,用处理后的图减去原图,在下面可以看到
mat4=matOperation.inverseMat(mat4);// 这里是图像颜色反转黑变白,白变黑,自己写的,如下
Bitmap bp4 = Bitmap.createBitmap(mat4.cols(), mat4.rows(), Bitmap.Config.RGB_565);
Utils.matToBitmap(mat4,bp4);
imageView.setImageBitmap(bp4);
mat4.release();
mat_src.release();

两图相减函数

    /**
     * 对两个RGB图像做减法操作
     * @param mat1
     * @param mat2
     * @return RGB图像
     */
    public Mat minusRGBMat(Mat mat1, Mat mat2){
        int height=mat1.rows();
        int width=mat1.cols();
        int channels=mat1.channels();
        byte[] values1= new byte[height*width*channels];
        byte[] values2= new byte[height* width*channels];
        mat1.get(0,0,values1);
        mat2.get(0,0,values2);
        Mat desMat = new Mat(mat1.rows(), mat1.cols() , CV_8UC4);
        for(int i=0; i<values1.length;i++){
            if(((values1[i]&0xff)-(values2[i]&0xff))<0){
                values1[i]= (byte) ((values1[i]&0xff)%(values2[i]&0xff));
            }else {
                values1[i]= (byte) ((values1[i]&0xff)-(values2[i]&0xff));
            }
        }
        desMat.put(0,0,values1);
        return desMat;
    }

白变黑黑变白颜色反转

   /**
     * 使图片黑白反转
     * @param mat
     * @return
     */
    public Mat inverseMat(Mat mat){
        int height=mat.rows();
        int width=mat.cols();
        Mat desMat = new Mat(height, width, CV_8UC4);
        int channels=mat.channels();
        Log.v("Picture_attribute","该图像通道数"+channels);
        byte[] values = new byte[height*width*channels];
        mat.get(0,0,values);
        for(int row=0; row<height; row++){
            for(int col=0; col<width; col++){
                int index=channels*(row*width+col);
                values[index]= (255-values[index]&0xff)>0?(byte)(255-values[index]&0xff):values[index];
                values[index+1]= (255-values[index+1]&0xff)>0?(byte)(255-values[index+1]&0xff):values[index+1];
                values[index+2]= (255-values[index+2]&0xff)>0?(byte)(255-values[index+2]&0xff):values[index+2];
            }
        }
        desMat.put(0, 0, values);
        return desMat;
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

扮作大侠

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

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

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

打赏作者

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

抵扣说明:

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

余额充值