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

这篇具有很好参考价值的文章主要介绍了[Android]使用jni实现高斯模糊。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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));

效果图:

[Android]使用jni实现高斯模糊,算法,android,jni          [Android]使用jni实现高斯模糊,算法,android,jni

              原图                                                   均值模糊后的图片

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);

效果图:

[Android]使用jni实现高斯模糊,算法,android,jni              [Android]使用jni实现高斯模糊,算法,android,jni

          原图                                                     高斯模糊后的图片

4.整体代码:

注意在CMakelist文件中添加以下代码,不然编译的时候会报错

target_link_libraries( # Specifies the target library.
        #在target_link_libraries中添加下面的依赖项
        jnigraphics
        )
 

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);

}

记录一下学习内容文章来源地址https://www.toymoban.com/news/detail-552402.html

到了这里,关于[Android]使用jni实现高斯模糊的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android串口开发之使用JNI实现ANDROID和串口通信

    导语:Android串口通信在物联网、智能家居等领域具有广泛的应用。本文将详细介绍如何使用JNI技术实现Android设备与串口的通信,包括串口的打开、设置参数和读写数据等过程。 在开始介绍Android串口开发之前,我们需要了解以下几个概念: JNI:JNI(Java Native Interface)是一种

    2024年02月07日
    浏览(45)
  • Python实现高斯模糊算法(含完整源码)

    Python实现高斯模糊算法(含完整源码) 在图像处理中,高斯模糊是一种常用的模糊滤镜算法,其主要原理是通过对图像进行卷积操作来减少噪点和细节,从而得到更加平滑的图像效果。在Python语言中,我们可以通过NumPy和OpenCV等第三方库来实现高斯模糊算法。 下面是基于Nu

    2024年02月14日
    浏览(47)
  • Android JNI实现锅炉压力显示系统详解

    前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下\\\"通俗易懂,风趣幽默\\\",感觉非常有意思,忍不住分享一下给大家。 👉点击跳转到教程 第一步创建GuoLu.c文件 第二步在build.gradle文件中,进行相关配置 第三步实现在MainActivity中,调用相关的C代码,显示锅炉压力值

    2024年02月13日
    浏览(30)
  • Android Studio中使用cmake开发JNI实战

    JNI学习大纲 一、JNI编程入门 二、Android Studio中使用cmake开发JNI实战 第一章节我们介绍了JNI的开发步骤,那这一章节我们就开始在Android Studio中实战一下吧,Let\\\'s Start。 AS中菜单栏选择ToolsSDK Manager 在Android SDK中选择SDK Tools,安装CMake和NDK。 在项目工程下的src/main创建cpp目录,编

    2024年02月14日
    浏览(53)
  • Android studio配置OpenCV的JNI接口,实现C++代码编程

    目录 一、下载OpenCV-android-sdk 二、新建项目 三、导入OpenCV包  四、配置OpenCV的JNI接口,拷贝OpenCV所需的头文件和库文件 五、修改Cmake文件  六、配置app的build.gradle文件  七、测试 OpenCV官网地址:https://opencv.org/  点击Library--Releases,下载Android版本,解压得到 OpenCV-android-sdk文件

    2024年02月10日
    浏览(45)
  • Android JNI系列详解之ndk-build工具的使用

    一、Android项目中使用ndk-build工具编译库文件 之前介绍过CMake编译工具的使用,今天介绍一种ndk自带的编译工具ndk-build的使用。 ndk-build目前主要有两种配置使用方式:  如上图所示,第一种方式是Android.mk+Application.mk+gradle的方式生成库文件;第二种方式是Android.mk+Application.mk+命

    2024年02月10日
    浏览(34)
  • android 窗口级模糊实现方式

    在Android上实现窗口级模糊效果有多种方法,下面列出了其中两种常用的实现方式: RenderScript模糊效果: 使用 ScriptIntrinsicBlur 类在RenderScript中实现模糊效果。 创建一个RenderScript实例并将要模糊的图像传递给它。 创建一个 ScriptIntrinsicBlur 实例并设置模糊的半径。 使用 setInput

    2024年02月13日
    浏览(43)
  • 【OpenCV Python实现图像增强:高斯模糊和运动模糊】

    【OpenCV Python实现图像增强:高斯模糊和运动模糊】 图像处理是计算机视觉领域的重要分支,它在各个领域都有广泛的应用。图像增强是其中的一个重要技术,可以帮助我们提升图像的质量和清晰度。本文将介绍如何使用Python和OpenCV库来实现两种常见的图像增强方法:高斯模

    2024年02月12日
    浏览(44)
  • Android JNI3--JNI基础

    C 预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C 预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理。我们将把 C 预处理器(C Preprocessor)简写为 CPP。 所有的预处理器命令都是以井号(#)开头。

    2024年02月12日
    浏览(35)
  • OpenCV实现高斯模糊加水印

    2024年02月15日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包