目錄
效果展示
函數(shù)講解
這里使用的是如下函數(shù):
CV_EXPORTS_W void copyMakeBorder(InputArray src, OutputArray dst,
int top, int bottom, int left, int right,
int borderType, const Scalar& value = Scalar() );
其中參數(shù)如下:
src:源圖像
dst:輸出圖像
top:頂部邊界的高度
bottom:底部邊界的高度
left:左邊邊界的寬度
right:右邊邊界的寬度
borderType:邊界填充類型
value :當(dāng)邊界填充類型為BORDER_CONSTANT的時(shí)候姑原,用于指定填充顏色
其中borderType有如下參數(shù)
實(shí)現(xiàn)代碼
其中Bitmap與Mat的轉(zhuǎn)換可以參考源碼中的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轉(zhuǎn)換為Mat
BitmapToMat(env,bitmap,src, JNI_FALSE);
//將四周邊界都定為寬度50
copyMakeBorder(src,src,50,50,50,50,BORDER_REPLICATE);
//將Mat轉(zhuǎn)換為Bitmap
MatToBitmap(env,src,bitmapDest, JNI_FALSE);
//釋放Mat
src.release();
return bitmapDest;
}
另外要注意的是Bitmap在轉(zhuǎn)換的過(guò)程中寬高會(huì)發(fā)生改變,因此要對(duì)目標(biāo)Bitmap進(jìn)行處理园爷,如下所示
val bitmapSrc = BitmapFactory.decodeResource(resources,R.drawable.dog)
//目標(biāo)圖像寬高比源圖像要多100(因?yàn)槟繕?biāo)圖像四周都加了50)
val bitmapDst = Bitmap.createBitmap(bitmapSrc.width + 100 ,bitmapSrc.height + 100 , Bitmap.Config.ARGB_8888)