Android NDK开发OpenCV系列:图像融合

目录

效果展示

函数讲解

这里使用的是如下函数:

CV_EXPORTS_W void addWeighted(InputArray src1, double alpha, InputArray src2,
                              double beta, double gamma, OutputArray dst, int dtype = -1);

其中参数如下:
src1:第一张源图像
alpha:第一张图像占的比重
src2:第二张源图像
beta:第二张图像占的比重
gamma:该值越大图像越白,大于等于255时图像全白
dst:合成的目标图像

实现代码

这里要注意的是两张融合的图像大小要调整为一致,不一致的话会出现错误

extern "C"
JNIEXPORT jobject JNICALL
Java_com_itfitness_cppdemoone_activity_AddWeightActivity_imageAddWeight(JNIEnv *env, jobject thiz,
                                                                        jobject bitmap_src,
                                                                        jobject bitmap_src2) {
    //源图像
    Mat src,src2;
    //将Bitmap转换为Mat
    BitmapToMat(env,bitmap_src,src, JNI_FALSE);
    BitmapToMat(env,bitmap_src2,src2, JNI_FALSE);

    //将src2的大小调整为与src一样大
    AndroidBitmapInfo info;
    if(AndroidBitmap_getInfo(env, bitmap_src, &info) >= 0){
        resize(src2,src2,Size(info.width,info.height));
        //添加权重进行融合
        addWeighted(src,0.8,src2,0.2,0,src);
    }

    //将Mat转换为Bitmap
    MatToBitmap(env,src,bitmap_src, JNI_FALSE);

    //释放Mat
    src.release();
    return bitmap_src;
}

案例源码

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

你可能感兴趣的:(Android NDK开发OpenCV系列:图像融合)