android端基于openCV给图片打马赛克

2024-06-15 10:48

本文主要是介绍android端基于openCV给图片打马赛克,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近一直在捣腾openCV,看到别人朋友圈总喜欢给图片打一点马赛克,充满神秘感。准备用openCV来实现打码,其实足够模糊就能实现马赛克效果。查看API发现ImgProc模块提供四种模糊方法:高斯模糊、均值模糊、中值模糊、双边滤波。在这里主要比较高斯模糊、均值模糊以及自定义覆盖层的实现效果。

首先,各种初始化:openCV库、模糊线程、人脸检测器。

    /*** 初始化openCV*/private void initOpenCV(){boolean result = OpenCVLoader.initDebug();if(result){Log.i(TAG, "initOpenCV success...");}else {Log.e(TAG, "initOpenCV fail...");}}/*** 初始化mat*/private void initMat(){mat = new Mat();bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.beauty);Utils.bitmapToMat(bitmap, mat);}/*** 初始化线程*/private void initThread(){blurThread = new BlurThread(mHandler, blurMat);blurThread.start();blurThread.setRunning(true);}/*** 初始化人脸检测器* @param context context*/public void initDetector(Context context){mFaceRect = new MatOfRect();mFaceDetector = new ObjectDetector(context, R.raw.lbpcascade_frontalface,6, 0.2F, 0.2F,new Scalar(0, 0, 255, 0));}
使用人脸检测器去检测人脸,得到待打码区域:

    /*** 检测人脸*/private void detectFace(){Mat mGray = new Mat();Imgproc.cvtColor(mat, mGray, Imgproc.COLOR_RGBA2GRAY);Rect[] faceRect = mFaceDetector.detectObject(mGray, mFaceRect);if(faceRect != null && faceRect.length > 0){Rect face = faceRect[0];//矩形标识Imgproc.rectangle(mat, face.tl(), face.br(),mFaceDetector.getRectColor(), 3);//待打码区域blurMat = mat.submat((int) face.tl().y, (int) face.br().y, (int) face.tl().x, (int) face.br().x);}mGray.release();mHandler.obtainMessage(100).sendToTarget();}


1、高斯模糊

高斯模糊是采用高斯核函数,创建高斯滤波器,遍历待滤波区域:每一个像素与给定像素矩阵模板相乘,求线性加权平均点。

    //高斯模糊private void gaussianBlur(int width, int height,double sigmaX){Imgproc.GaussianBlur(blurMat, blurMat, new Size(width, height), sigmaX);}


2、均值模糊

均值模糊是对给定像素矩阵取平均值,算法比高斯模糊简单点,耗时相对短一点。

    //均值模糊private void normalBlur(int width, int height){Imgproc.blur(blurMat, blurMat, new Size(width, height));}

3、深度模糊(自定义覆盖层)

自定义模糊算法相对简单:遍历待处理区域,重新赋值为指定颜色值。

    //自定义模糊private void customBlur(int color){//ARGB转成RGBApixelColor[2] = color & 0xFF;//BluepixelColor[1] = (color >> 8) & 0xFF;//GreenpixelColor[0] = (color >> 16) & 0xFF;//RedpixelColor[3] = (color >> 24) & 0xFF;//Alphafor (int x=0; x<blurMat.rows(); x++){for (int y=0; y<blurMat.cols(); y++){blurMat.put(x, y, pixelColor);}}}

如果需要在预览时,可采用均值模糊进行实时打码(高斯模糊耗时比较长,引起预览卡顿):

    @Overridepublic Mat onCameraFrame(CvCameraViewFrame inputFrame) {mRgba = inputFrame.rgba();mGray = inputFrame.gray();// 检测人脸Rect[] faceRect = mFaceDetector.detectObject(mGray, mFaceRect);if(faceRect != null && faceRect.length > 0){Rect face = faceRect[0];//采用均值模糊进行打码Mat blurMat = mRgba.submat((int) face.tl().y, (int) face.br().y, (int) face.tl().x, (int) face.br().x);Imgproc.blur(blurMat, blurMat, new Size(99, 99));}return mRgba;}
好了,关于采用高斯模糊、均值模糊以及自定义覆盖层给图片打码分析完毕。如果各位有什么问题或建议,欢迎交流,如果觉得本篇文章对您有所帮助,麻烦点个赞。。。


这篇关于android端基于openCV给图片打马赛克的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1063239

相关文章

C#中图片如何自适应pictureBox大小

《C#中图片如何自适应pictureBox大小》文章描述了如何在C#中实现图片自适应pictureBox大小,并展示修改前后的效果,修改步骤包括两步,作者分享了个人经验,希望对大家有所帮助... 目录C#图片自适应pictureBox大小编程修改步骤总结C#图片自适应pictureBox大小上图中“z轴

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

使用Python将长图片分割为若干张小图片

《使用Python将长图片分割为若干张小图片》这篇文章主要为大家详细介绍了如何使用Python将长图片分割为若干张小图片,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果1. Python需求

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

opencv实现像素统计的示例代码

《opencv实现像素统计的示例代码》本文介绍了OpenCV中统计图像像素信息的常用方法和函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 统计像素值的基本信息2. 统计像素值的直方图3. 统计像素值的总和4. 统计非零像素的数量

使用 Python 和 LabelMe 实现图片验证码的自动标注功能

《使用Python和LabelMe实现图片验证码的自动标注功能》文章介绍了如何使用Python和LabelMe自动标注图片验证码,主要步骤包括图像预处理、OCR识别和生成标注文件,通过结合Pa... 目录使用 python 和 LabelMe 实现图片验证码的自动标注环境准备必备工具安装依赖实现自动标注核心

Java操作xls替换文本或图片的功能实现

《Java操作xls替换文本或图片的功能实现》这篇文章主要给大家介绍了关于Java操作xls替换文本或图片功能实现的相关资料,文中通过示例代码讲解了文件上传、文件处理和Excel文件生成,需要的朋友可... 目录准备xls模板文件:template.xls准备需要替换的图片和数据功能实现包声明与导入类声明与

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

基于C#实现将图片转换为PDF文档

《基于C#实现将图片转换为PDF文档》将图片(JPG、PNG)转换为PDF文件可以帮助我们更好地保存和分享图片,所以本文将介绍如何使用C#将JPG/PNG图片转换为PDF文档,需要的可以参考下... 目录介绍C# 将单张图片转换为PDF文档C# 将多张图片转换到一个PDF文档介绍将图片(JPG、PNG)转

Qt QWidget实现图片旋转动画

《QtQWidget实现图片旋转动画》这篇文章主要为大家详细介绍了如何使用了Qt和QWidget实现图片旋转动画效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、效果展示二、源码分享本例程通过QGraphicsView实现svg格式图片旋转。.hpjavascript