OpenCV优化验证码识别

首先请确保本地已经安装 OpenCV
主要参考文章:https://blog.csdn.net/u014644574/article/details/122065292

原图:
原图
处理过后的图片:
在这里插入图片描述

没有绝对完美的验证码识别策略,只能因时因地的进行适配调整。以下给出一个范例:

<!-- 引入依赖 -->
<dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>javacv-platform</artifactId>
    <version>1.5.7</version>
</dependency>
// 加载本地 OpenCV core 模块
Loader.load(opencv_core.class);
String fileName = "/Users/thinkstu/Desktop/opencv_test/";

// 读取图片,类型为彩色
String imagePath = "/Users/thinkstu/Desktop/5.png";
Mat    src       = opencv_imgcodecs.imread(imagePath, COLOR_BGR2RGB);

// 灰阶处理,并保存(下面每一次操作都将保存一张图片)
Mat gray = new Mat();
opencv_imgproc.cvtColor(src, gray, opencv_imgproc.COLOR_BGR2GRAY);
opencv_imgcodecs.imwrite(fileName + "gray.jpg", gray);

// 黑白转换,binary 即 2 个极端
Mat binary = new Mat();
opencv_imgproc.adaptiveThreshold(gray,binary,255,Imgproc.ADAPTIVE_THRESH_MEAN_C,Imgproc.THRESH_BINARY, 11, 2);
opencv_imgcodecs.imwrite(fileName + "binary.jpg", binary);

// 中值滤波,去噪点( 3 为去噪级别)
Mat medianBlurImage = new Mat();
opencv_imgproc.medianBlur(binary, medianBlurImage, 3);
opencv_imgcodecs.imwrite(fileName + "medianBlur.jpg", medianBlurImage);

// 膨胀
Mat dilated = new Mat();
Mat dilateKernel = opencv_imgproc
        .getStructuringElement(opencv_imgproc.MORPH_RECT, new Size(2, 2));
opencv_imgproc.dilate(medianBlurImage, dilated, dilateKernel);
opencv_imgcodecs.imwrite(fileName + "dilated.jpg", dilated);

// 腐蚀
Mat eroded = new Mat();
Mat erodeKernel = opencv_imgproc
        .getStructuringElement(opencv_imgproc.MORPH_RECT, new Size(2, 2));
opencv_imgproc.erode(dilated, eroded, erodeKernel);
opencv_imgcodecs.imwrite(fileName + "eroded.png", eroded);

// 在此处添加验证码识别代码,例如使用 Tesseract OCR 或其他库进行识别
src.release();
gray.release();
binary.release();
dilated.release();
eroded.release();

猜你喜欢

转载自blog.csdn.net/qq_35760825/article/details/129819882