目录
效果展示
函数讲解
这里使用的是如下函数:
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)
网友评论