Android NDK开发OpenCV系列:直方图均值化

目录

效果展示

函数讲解

这里普通均值化使用的函数我之前的文章有介绍过:
equalizeHist(直方图均衡化,提升对比度)
另外一个自适应均值化的函数如下(该函数从效果上看可以保留更多的细节):

CV_EXPORTS_W Ptr createCLAHE(double clipLimit = 40.0, Size tileGridSize = Size(8, 8));

其中参数如下:
clipLimit :对比度限制的阈值
tileGridSize :直方图均衡的网格大小,输入图像将被分成大小相等的矩形图块,tileGridSize 定义行和列中的瓦片数

实现代码

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

    cvtColor(src,src,CV_BGR2GRAY);

    //直方图均值化
    equalizeHist(src, src);//图像直方图均衡化

    //将Mat转换为Bitmap
    MatToBitmap(env,src,bitmap_src, JNI_FALSE);
    //释放Mat
    src.release();
    return bitmap_src;
}
extern "C"
JNIEXPORT jobject JNICALL
Java_com_itfitness_cppdemoone_activity_HistogramAverageActivity_imageAdaptiveHistogramAverage(
        JNIEnv *env, jobject thiz, jobject bitmap_src) {
    //源图像
    Mat src;
    //将Bitmap转换为Mat
    BitmapToMat(env,bitmap_src,src, JNI_FALSE);

    cvtColor(src,src,CV_BGR2GRAY);

    //自适应直方图均值化
    Ptr ptr = createCLAHE(2.0,Size(8,8));
    ptr->apply(src,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系列:直方图均值化)