Android NDK开发OpenCV系列:直方图均值化
2022-03-01 本文已影响0人
itfitness
目录
效果展示
函数讲解
这里普通均值化使用的函数我之前的文章有介绍过:
equalizeHist(直方图均衡化,提升对比度)
另外一个自适应均值化的函数如下(该函数从效果上看可以保留更多的细节):
CV_EXPORTS_W Ptr<CLAHE> 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<CLAHE> 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;
}