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

目录

效果展示

函数讲解

这里使用的是如下函数:

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 
#include 
#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系列:边界填充)