目录
目录效果演示
实现原理
首先将图像转换为灰度图像,然后将图像转换为二值图像,然后利用形态学操作的开操作(先膨胀后腐蚀),将除字母外的细线清除。
相关API
●cvtColor(颜色空间转换)
●threshold(图像二值化)
●morphologyEx(形态学操作)
核心代码
OpenCV库的引入可以看:OpenCV On Android最佳环境配置指南(Android Studio篇)
这里是在Native层进行操作的。
extern "C"
JNIEXPORT void JNICALL
Java_com_itfitness_opencvrehearse_demos_codeextra_CodeExtraActivity_codeExtra(JNIEnv *env,
jobject instance,
jobject bitmap) {
AndroidBitmapInfo info;
void *pixels;
CV_Assert(AndroidBitmap_getInfo(env, bitmap, &info) >= 0);
CV_Assert(info.format == ANDROID_BITMAP_FORMAT_RGBA_8888 ||
info.format == ANDROID_BITMAP_FORMAT_RGB_565);
CV_Assert(AndroidBitmap_lockPixels(env, bitmap, &pixels) >= 0);
CV_Assert(pixels);
if (info.format == ANDROID_BITMAP_FORMAT_RGBA_8888) {
Mat temp(info.height, info.width, CV_8UC4, pixels);
Mat gray;
cvtColor(temp, gray,CV_RGBA2GRAY);//转为灰度图像
threshold(gray, gray, 170, 255, CV_THRESH_BINARY);//图像二值化
Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5));//创建结构元素大小为3*3
morphologyEx(gray, gray, MORPH_CLOSE, kernel);//闭操作
cvtColor(gray,temp,CV_GRAY2RGBA);//转为RGBA图像
gray.release();//释放资源
}
AndroidBitmap_unlockPixels(env, bitmap);
}
网友评论