2023-06-16 Android app 使用opencv 调用jni在图片上添加文字,对图片进行模糊处理,源码实例学习。

这篇具有很好参考价值的文章主要介绍了2023-06-16 Android app 使用opencv 调用jni在图片上添加文字,对图片进行模糊处理,源码实例学习。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、要理解还是得自己看代码

       1.1 完整的测试代码路径如下

https://download.csdn.net/download/qq_37858386/87916944

       1.2 代码架构 

2023-06-16 Android app 使用opencv 调用jni在图片上添加文字,对图片进行模糊处理,源码实例学习。

       1.3 app 运行效果

2023-06-16 Android app 使用opencv 调用jni在图片上添加文字,对图片进行模糊处理,源码实例学习。

二、android studio 添加 opencv module可以参考下面的文章,比较详细。

Android + OpenCV 入门教程笔记(保姆级)_opencv android_派的十二位的博客-CSDN博客

三、按上面的添加opencv 模块后,添加文字,方法一,不需要另外添加jni。这个方法主要参考下面文章Android App开发超实用实例 | OpenCV在Android手机实现在图像上添加文本_opencv手机版_TiAmo zhang的博客-CSDN博客

1、添加下面的代码就可以在图片上添加文字。

        myImageView = (ImageView) findViewById(R.id.img_picture);
        myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.win);
       // myImageView.setImageBitmap(myBitmap);

        Bitmap myNewBitmap=Bitmap.createBitmap(myBitmap.getWidth(),
                myBitmap.getHeight(),Bitmap.Config.RGB_565); //根据原始图像创建空Bitmap
        Mat myMat=new Mat();
        Utils.bitmapToMat(myBitmap,myMat);                //将原始图像保存至myMat
        Point myPoint=new Point(0, 100);                //定义绘制文本的起始位置
        Scalar myScalar=new Scalar(255,0,0,0);              //设置绘制文本的颜色
        //在图像上添加文本(仅支持英文、符号等,中文暂不支持)
        Imgproc.putText(myMat,"I Love OpenCV",myPoint,
                1,5,myScalar,3);
        //将添加文本之后的图像输出至myNewBitmap
        Utils.matToBitmap(myMat,myNewBitmap);
        //通过ImageView控件显示叠加文本之后的图像

        //myNewBitmap.
        myImageView.setImageBitmap(myNewBitmap);


    static{
        System.loadLibrary("opencv_java4");
    }

2、效果图如下。

2023-06-16 Android app 使用opencv 调用jni在图片上添加文字,对图片进行模糊处理,源码实例学习。

四、方法二、使用jni 调用opencv 实现在图片上添加文字。主要参考下面文章【安卓随笔】引入OpenCV进行NDK开发之图片传递(案例:文字水印)_vicemiami的博客-CSDN博客

      1、java 主要代码


                Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.win);
                int w = bmp.getWidth();
                int h = bmp.getHeight();
                int[] pixels = new int[w * h];
                bmp.getPixels(pixels, 0, w, 0, 0, w, h);
                String content = "I love New zealand";
                int[] resultInt = addText2Picture(pixels, w, h, content);
                if (resultInt != null) {
                    Bitmap resultImg = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
                    resultImg.setPixels(resultInt, 0, w, 0, 0, w, h);
                    myImageView.setImageBitmap(resultImg);
                }
            }

      2、jni 代码

JNIEXPORT jintArray JNICALL
Java_com_hypernano_opencvdemo_MainActivity_addText2Picture(
        JNIEnv *env,
        jobject, jintArray pixels_,
        jint w, jint h, jstring textString) {

    const char *text = env->GetStringUTFChars(textString, 0);
    string content = text;

    jint *pixels = env->GetIntArrayElements(pixels_, NULL);
    if (pixels == NULL) {
        return NULL;
    }

    Mat src(h, w, CV_8UC4, pixels);
    int width = src.cols;
    int height = src.rows;
    int margin = 10;
    int baseline;
    Size srcSize = getTextSize(content, FONT_HERSHEY_COMPLEX, 2, 2, &baseline);
    cv::Point point;
    point.x = width - srcSize.width - margin;
    point.y = height - margin;
    //Scalar BGR
    putText(src, content, point, FONT_HERSHEY_COMPLEX, 2, cv::Scalar(94, 206, 165, 255), 2, 8, 0);
    int size = w * h;
    jintArray result = env->NewIntArray(size);
    env->SetIntArrayRegion(result, 0, size, pixels);
    env->ReleaseIntArrayElements(pixels_, pixels, 0);
    env->ReleaseStringUTFChars(textString, text);
    return result;
}

3、效果图

2023-06-16 Android app 使用opencv 调用jni在图片上添加文字,对图片进行模糊处理,源码实例学习。

五、对图片进行模糊处理效果,主要参考下面的文章

Android引入OpenCV的示例_Android_脚本之家

1、java部分的主要代码

                Bitmap srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.win);
                int w = srcBitmap.getWidth();
                int h = srcBitmap.getHeight();
                int[] pixels = new int[w*h];
                srcBitmap.getPixels(pixels,0,w,0,0,w,h);
                int[] outPixels = getBlurImage(pixels ,w,h);
                Bitmap destBitmap = Bitmap.createBitmap(w,h, Bitmap.Config.ARGB_8888);
                destBitmap.setPixels(outPixels,0,w,0,0,w,h);
                myImageView = (ImageView) findViewById(R.id.img_picture);
                myImageView.setImageBitmap(destBitmap);

2、jni 部分主要代码

JNIEXPORT jintArray JNICALL
//Java_com_live_longsiyang_opencvdemo_OpenCVNativeManager_getBlurImage
Java_com_hypernano_opencvdemo_MainActivity_getBlurImage
    (JNIEnv *env, jobject thiz,jintArray pixels_, jint w,jint h) {

    int colorType = CV_8UC4;
    jint *pixels = env->GetIntArrayElements(pixels_, NULL);

    Mat imgMat(h, w, colorType, pixels);
    Mat out(h, w, colorType);
    blur(imgMat, out, Size(20, 20));
    env->ReleaseIntArrayElements(pixels_, pixels, 0);
    int *outIntImage = new int[w * h];
    for (int i = 0; i < w * h; i++) {
        int a, r, g, b;
        for (int j = 0; j < 4; j++) {
            a = out.data[i * 4 + 3];
            r = out.data[i * 4 + 2];
            g = out.data[i * 4 + 1];
            b = out.data[i * 4 + 0];
            outIntImage[i] = (int) out.data[i * 4 + j];
        }
        outIntImage[i] = MAKE_ARGB(a,r,g,b);

    }
    jintArray result = env->NewIntArray(w * h);
    env->SetIntArrayRegion(result, 0, w * h, outIntImage);
    return result;

}

3、效果图,可以看到图片已经模糊

2023-06-16 Android app 使用opencv 调用jni在图片上添加文字,对图片进行模糊处理,源码实例学习。

六、参考文章

android 图片添加暗水印 - 掘金

Android引入OpenCV的示例_Android_脚本之家

用opencv在图片上面添加水印_添加水印opencv qt_三火哥的博客-CSDN博客

Android OpenCV实现图片叠加,水印_xkyle的博客-CSDN博客

Android + OpenCV 入门教程笔记(保姆级)_opencv android_派的十二位的博客-CSDN博客

OpenCV download | SourceForge.net

安卓用jni对接opencv踩坑记_"the imported target \"libcpufeatures\" references_IceGost的博客-CSDN博客

Android 配置 OpenCV环境(Android Stdio 4.1.3 openCV 4.5.5)_opencv环境 androis_HGGshiwo的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-492101.html

到了这里,关于2023-06-16 Android app 使用opencv 调用jni在图片上添加文字,对图片进行模糊处理,源码实例学习。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Android Native Code开发学习(二)JNI互相传参返回调用

    本教程为native code学习笔记,希望能够帮到有需要的人 我的电脑系统为ubuntu 22.04,当然windows也是可以的,区别不大 native code就是在android项目中混合C++或者C语言进行开发,这样的好处是很多底层的东西需要使用C++/C的语言进行操作,而且在android开发中,使用C++和C混合开发能够

    2024年02月11日
    浏览(39)
  • OpenCV(一):Android studio jni配置OpenCV(亲测有效,保姆级)

    目录 1.下载OpenCV的SDK 2.创建Android Native C++项目 3.Android项目中导入OpenCV工程 4.导入OpenCV的库文件 5.实现opencv高斯模糊图像处理的demo 要在Android Studio中配置使用OpenCV库的C++方法,需要完成以下步骤: 1.下载OpenCV的SDK 首先,您可以从OpenCV官方网站(Releases - OpenCV )下载适用于And

    2024年02月03日
    浏览(51)
  • 2023-06-16 LeetCode每日一题(并行课程 II)

    点击跳转到题目位置 给你一个整数 n 表示某所大学里课程的数目,编号为 1 到 n ,数组 relations 中, relations[i] = [xi, yi] 表示一个先修课的关系,也就是课程 xi 必须在课程 yi 之前上。同时你还有一个整数 k 。 在一个学期中,你 最多 可以同时上 k 门课,前提是这些课的先修课

    2024年02月09日
    浏览(46)
  • 使用OpenCV调用摄像头和读取视频图片

    要捕获视频,你需要创建一个 VideoCapture 对象。它的参数是设备索引的名称。设备索引就是指定哪个摄像头的数字。正常情况下,内部摄像头可以通过传入0来调用,传递1来选择外置的第二个相机,以此类推。在此之后,你可以逐帧捕获。但是在最后,不要忘记释放俘虏。 直

    2024年02月08日
    浏览(53)
  • jni-Android Bitmap与OpenCV cv::Mat互转

    在封装so库的时候,底层c++代码的实现使用了OpenCV对图片进行操作,而Android中从摄像头中获取到的图片数据类型是Bitmap数据类型的,所以这里就避免不了做数据类型的转换。转换的方案主要有两种, 一种是封装的JNI接口方法直接接收cv::Mat数据类型的参数, 第二种是JNI方法的

    2024年02月01日
    浏览(44)
  • 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日
    浏览(49)
  • 【环境配置】Android-Studio-OpenCV-JNI以及常见错误 ( 持续更新 )

    最近一个项目要编译深度学习的库,需要用到 opencv 和 JNI,本文档用于记录环境配置中遇到的常见错误以及解决方案 解决办法: 删除文件 .idea/gradle.xml 和 .idea/workspace.xml , 重新编译; 解决办法:Invalid Gradle JDK configuration found 原因是NDK版本过高,跟当前的AndroidStudio版本不匹配

    2024年02月11日
    浏览(45)
  • 【深度学习】python使用opencv调用摄像头拍摄并保存图片

    打开pycharm,新建一个camerm.py文件,把下面代码复制粘贴进去就可以了。 需要安装两个库:pip install opencv-python;pip install numpy

    2024年02月11日
    浏览(42)
  • 关于 Delphi 11.3跨平台开发Android调用 JNI JAR java 的说明和注意事项

    关于 调用 JNI JAR 的说明和注意事项,调用第三方 JAR SDK 和 翻译 安卓 JAVA 代码 的说明 V2017.10.18 (* ************************************************ *) (* *) (* *) (* 设计:爱吃猪头肉 Flying Wang 2015-04-15  *) (* 上面的版权声明请不要移除。 *) (* *) (* ************************************************ *) 本人所

    2024年02月07日
    浏览(61)
  • Java使用JNI实现C文件的调用

    构建最基本的maven类型就行,文件结构如下: 其中最主要的类如下: main方法可有可无,只是用来测试的。 给IDEA做一个额外工具类: 在File-Settings–Tools–External Tools下新建。 Name和Description随意,Name会在下面用到。重要的的下面三个: build java项目,在.class上点击鼠标右键—

    2024年02月15日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包