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

相关文章

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

opencv 滚动条

参数介绍:createTrackbar( trackbarname , "hello" , &alpha_slider ,alpha_max ,  on_trackbar )  ;在标签中显示的文字(提示滑动条的用途) TrackbarName创建的滑动条要放置窗体的名字 “hello”滑动条的取值范围从 0 到 alpha_max (最小值只能为 zero).滑动后的值存放在

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

android应用中res目录说明

Android应用的res目录是一个特殊的项目,该项目里存放了Android应用所用的全部资源,包括图片、字符串、颜色、尺寸、样式等,类似于web开发中的public目录,js、css、image、style。。。。 Android按照约定,将不同的资源放在不同的文件夹中,这样可以方便的让AAPT(即Android Asset Packaging Tool , 在SDK的build-tools目

Android fill_parent、match_parent、wrap_content三者的作用及区别

这三个属性都是用来适应视图的水平或者垂直大小,以视图的内容或尺寸为基础的布局,比精确的指定视图的范围更加方便。 1、fill_parent 设置一个视图的布局为fill_parent将强制性的使视图扩展至它父元素的大小 2、match_parent 和fill_parent一样,从字面上的意思match_parent更贴切一些,于是从2.2开始,两个属性都可以使用,但2.3版本以后的建议使

Spring MVC 图片上传

引入需要的包 <dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-