首先请确保本地已经安装 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();