美文网首页
Android NDK开发:利用OpenCV实现图形验证码的提取

Android NDK开发:利用OpenCV实现图形验证码的提取

作者: itfitness | 来源:发表于2019-08-06 14:58 被阅读0次

目录

目录

效果演示

实现原理

首先将图像转换为灰度图像,然后将图像转换为二值图像,然后利用形态学操作的开操作(先膨胀后腐蚀),将除字母外的细线清除。

相关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);
}

案例源码

案例源码

相关文章

网友评论

      本文标题:Android NDK开发:利用OpenCV实现图形验证码的提取

      本文链接:https://www.haomeiwen.com/subject/lwridctx.html