美文网首页
Android NDK开发OpenCV系列:边界填充

Android NDK开发OpenCV系列:边界填充

作者: itfitness | 来源:发表于2022-02-24 11:09 被阅读0次

    目录

    效果展示

    函数讲解

    这里使用的是如下函数:

    CV_EXPORTS_W void copyMakeBorder(InputArray src, OutputArray dst,
                                     int top, int bottom, int left, int right,
                                     int borderType, const Scalar& value = Scalar() );
    

    其中参数如下:
    src:源图像
    dst:输出图像
    top:顶部边界的高度
    bottom:底部边界的高度
    left:左边边界的宽度
    right:右边边界的宽度
    borderType:边界填充类型
    value :当边界填充类型为BORDER_CONSTANT的时候,用于指定填充颜色

    其中borderType有如下参数


    实现代码

    其中Bitmap与Mat的转换可以参考源码中的utils.cpp

    #include <jni.h>
    #include <string>
    #include "utils.cpp"
    extern "C"
    JNIEXPORT jobject JNICALL
    Java_com_itfitness_cppdemoone_activity_BoundaryFillActivity_imageBoundaryFill(JNIEnv *env,
                                                                                  jobject thiz,
                                                                                  jobject bitmap,jobject bitmapDest) {
        //源图像
        Mat src;
        //将Bitmap转换为Mat
        BitmapToMat(env,bitmap,src, JNI_FALSE);
    
        //将四周边界都定为宽度50
        copyMakeBorder(src,src,50,50,50,50,BORDER_REPLICATE);
    
        //将Mat转换为Bitmap
        MatToBitmap(env,src,bitmapDest, JNI_FALSE);
    
        //释放Mat
        src.release();
        return bitmapDest;
    }
    

    另外要注意的是Bitmap在转换的过程中宽高会发生改变,因此要对目标Bitmap进行处理,如下所示

    val bitmapSrc = BitmapFactory.decodeResource(resources,R.drawable.dog)
    //目标图像宽高比源图像要多100(因为目标图像四周都加了50)
    val bitmapDst = Bitmap.createBitmap(bitmapSrc.width + 100 ,bitmapSrc.height + 100 , Bitmap.Config.ARGB_8888)
    

    案例源码

    https://gitee.com/itfitness/opencv-demo

    相关文章

      网友评论

          本文标题:Android NDK开发OpenCV系列:边界填充

          本文链接:https://www.haomeiwen.com/subject/nedzlrtx.html