[Android]使用jni实现高斯模糊

news2024/9/20 15:08:22

1.高斯模糊的原理:

     根据周边的像素值来确定自己的像素值,平均值,最大值,最小值,正太分布值

2.均值模糊blur

函数声明:

CV_EXPORTS_W void blur( InputArray src, OutputArray dst,
                        Size ksize, Point anchor = Point(-1,-1),
                        int borderType = BORDER_DEFAULT );

 功能:对输入的图像src进行均值滤波后用dst输出。

参数:src和dst当然分别是输入图像和输出图像。size为均值滤波器模板大小。Anchor为锚点,如果为Point(-1,-1),则锚点是滤波器的中心点。borderType为边缘点插值类型。

理解:以原图对应像素为中心的与模板中心重叠,将模板覆盖领域内全部像素求均值就是滤波后像素的值了。

实现代码:

 //均值模糊
    //Size(w,h)的宽w高h只能是基数
    blur(image,image,Size(101,101),Point(-1,-1));

效果图:

          

              原图                                                   均值模糊后的图片

 

3.高斯模糊GaussianBlur

函数声明:

CV_EXPORTS_W void GaussianBlur( InputArray src, OutputArray dst, Size ksize,
                                double sigmaX, double sigmaY = 0,
                                int borderType = BORDER_DEFAULT );

功能:对输入的图像src进行高斯滤波后用dst输出。

参数:src和dst当然分别是输入图像和输出图像。Ksize为高斯滤波器模板大小,sigmaX和sigmaY分别为高斯滤波在横线和竖向的滤波系数。borderType为边缘点插值类型。

理解:数字图像的滤波可以简单的这么理解,就是对原图像的每一个像素滤波,那么对应这个像素滤波后的值是根据其相邻像素(包括自己那个点)与一个滤波模板进行相乘即可。所以具体到高斯滤波,我们只要知道这个高斯滤波的模板即可。

实现代码:

// 高斯模糊
    GaussianBlur(image, image, Size(101, 101), 0);

效果图:

              

          原图                                                     高斯模糊后的图片

4.整体代码:

C++与java交互操作 :

import static com.demo.nightvision.jniTools.test;
public class jnitest extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_jnitest);
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.testjni);
        test(bitmap);
        ImageView image=findViewById(R.id.image);
        image.setImageBitmap(bitmap);
    }
}

public class jniTools {

    static {
        System.loadLibrary("native-lib");
    }

    public static native void test(Object bitmap);//jni学习

}

 native-lib.cpp:


extern "C"
JNIEXPORT void JNICALL
Java_com_demo_nightvision_jniTools_test(JNIEnv *env, jclass clazz, jobject bitmap) {
    AndroidBitmapInfo info;
    void *pixels;

    CV_Assert(AndroidBitmap_getInfo(env, bitmap, &info) >= 0);
    //判断图片是位图格式有RGB_565 、RGBA_8888
    CV_Assert(info.format == ANDROID_BITMAP_FORMAT_RGBA_8888 ||
              info.format == ANDROID_BITMAP_FORMAT_RGB_565);
    CV_Assert(AndroidBitmap_lockPixels(env, bitmap, &pixels) >= 0);
    CV_Assert(pixels);

    //将bitmap转化为Mat类
    Mat image(info.height, info.width, CV_8UC4, pixels);

    //均值模糊
    //Size(w,h)的宽w高h只能是基数
  // blur(image,image,Size(101,101),Point(-1,-1));

    // 高斯模糊
   GaussianBlur(image, image, Size(101, 101), 0);

}

记录一下学习内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/736703.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python绘制分组条形图

文章目录 数据导入多组条形图堆叠条形图 数据导入 我们经常会遇到对比多个统计量随时间变化的图像,比如想知道中国、美国以及欧盟最近几年GDP变化,如下表所示,单位是万亿美元。 中国美国欧盟201813.8920.5315.98201914.2821.3815.69202014.…

转换或是克隆的虚拟机无法联网,网络服务无法启动

新转换的虚拟机,无法联网,启动网络服务,报错: systemctl start network.service job for network.service failed because the control process exited with error code. 查看网络服务状态,systemctl status network…

SpringMVC 中的控制器如何处理文件上传

SpringMVC 中的控制器如何处理文件上传 Spring MVC 是一个基于 Java 的 Web 框架,它是 Spring 框架的一部分,提供了一系列的组件和工具,帮助开发人员构建 Web 应用程序。其中,控制器是 Spring MVC 中的核心组件之一,它…

SpringMVC 中的控制器如何返回 JSON 数据

SpringMVC 中的控制器如何返回 JSON 数据 SpringMVC 是一个基于 Spring 框架的 Web 框架,它提供了一种方便的方式来处理 HTTP 请求和响应。在 SpringMVC 中,控制器是用来处理请求的组件,它们负责接收请求、处理请求并返回响应。在本文中&…

三大城市分会场精彩呈现—2023架构·可持续未来峰会圆满收官!

2023年6月30日,由The Open Group主办的2023架构可持续未来峰会三大城市分会场成功举办,也代表着本次The Open Group半年度架构峰会圆满收官! 本次大会以“可持续未来”为主题,采用“13”,即北京主会场上海/成都/深圳三…

svg修改图标颜色

对于svg图标,想通过hover或者active 添加颜色,没有办法修改,解决办法: 1. 修改svg图片源 最开始的svg图标: 修改这个fill"currentColor" 要是要修改线条颜色就修改stroke属性: fill属性设置对象…

青岛大学_王卓老师【数据结构与算法】Week05_02_栈的定义和特点_学习笔记

本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享, 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础…

这所985太好考了,专硕06方向仅刷一人,其余过线全收!

一、学校及专业介绍 东北大学(Northeastern University)位于辽宁省沈阳市,是中华人民共和国教育部直属全国重点大学。它是国家“双一流”建设高校、国家“211工程”和“985工程”重点建设高校,全国首批博士、硕士学位授予单位。 …

10.12UEC++/结构体和枚举

1.结构体: 定义: 类中创建对象; UE4中使用: 也可以定义一个结构体类型的变量: 结构体成员想要在细节面板中调整时,也需要每个都加上UPropPerty指令宏才可以: 此时该变量没有break功能&#xff0…

Seal AppManager v0.2 发布:进一步简化应用部署体验

经过近3个月的研发,Seal AppManager v0.2 已正式发布。 Seal AppManager 是一款基于平台工程理念的应用统一部署管理平台,于今年4月首次推出。在上一版本中,我们已经释出集成 ChatGPT 简化服务模板代码生成、云成本可视化、动态环境管理等功…

用html+javascript打造公文一键排版系统2:显示源码/显示预览、清除格式

我们从实现最简单、最基本的功能开始。 一、显示源码/显示预览 我们通过btnShowSrc来实现示源码/显示预览功能&#xff0c;根据btnShowSrc.value来判断<iframe>的显示的内容并切换。 <iframe>默认为显示预览&#xff0c;所以btnShowSrc.value值为“显示源码”&a…

Flink DataStream之Connect合并流

新建类 package test01;import org.apache.flink.configuration.Configuration; import org.apache.flink.streaming.api.datastream.ConnectedStreams; import org.apache.flink.streaming.api.datastream.DataStreamSource; import org.apache.flink.streaming.api.datastre…

flutter开发实战-指纹、面容ID验证插件实现

flutter开发实战-指纹、面容ID验证插件实现 在iOS开发中&#xff0c;经常出现需要指纹、面容ID验证的功能。 指纹、面容ID是一种基于用生物识别技术&#xff0c;通过扫描用户的面部特征来验证用户身份。 一、效果图 二、iOS指纹、面容ID验证 在iOS中实现指纹、面容ID验证功能…

一同感受C++模版的所带来的魅力

文章目录 一、泛型编程思想二、函数模版1、函数模板概念2、函数模板格式3、函数模板的原理4、函数模板的实例化5、模板参数的匹配原则 三、类模版1、类模板的定义格式2、类模板的实例化 四、总结与提炼 一、泛型编程思想 首先我们来看一下下面这三个函数&#xff0c;如果学习过…

磁盘与文件系统管理

磁盘结构及分区表示 硬盘 Hard Disk Drive &#xff0c;简称 HDD 是计算机常用的存储设备之一。 1 磁盘基础 1.1 硬盘的结构 1.1.1 数据结构 ①扇区&#xff1a;磁盘上的每个磁道被等分为若干个弧段,这些弧段便是硬盘的扇区(Sector)。硬盘的第一个扇区&#xff0c;叫做引导…

【mysql】-【锁】

文章目录 概述MySQL并发事务访问相同记录读-读情况写-写情况读-写或写-读情况并发问题的解决方案 锁的不同角度分类 概述 事务的隔离性由这章讲述的锁来实现。 MySQL并发事务访问相同记录 并发事务访问相同记录的情况大致可以划分为3种: 读-读情况 读-读情况&#xff0c;…

使用vite创建vue3的Cesium基础项目

使用vite创建vue3的Cesium基础项目 使用vite创建vue3项目&#xff1a;可以参考官方文档Vite官方中文文档 1.1 在指定文件夹路径下使用npm&#xff08;前提是已经安装好了node&#xff09;&#xff1a; bash npm create vitelatest 1.2 cd到创建的项目文件夹&#xff1a; bash c…

符号化的正确姿势

GUI方式 将 .ips crash report 文件拖放到 Xcode > Window > Devices and Simulators > View Device Logs中, 然后导出 .crash 符号化文件. 使用条件: crash report 对应的 Archive 包是在本机构建的 symbolicatecrash symbolicatecrash 是一个 exec (可执行文件), …

常见的BUG---1、虚拟机启动之后,突然发现没有ens33网卡

1、问题描述 今天一开启虚拟机&#xff0c;发现用XShell连接不上我的一台虚拟机&#xff0c;其他虚拟机是正常可以连接的&#xff0c;我稍微看了一下XShell的配置和Windows中的映射文件&#xff08;hosts&#xff09;&#xff0c;都没有啥问题&#xff0c;然后我就知道应该是虚…