• 【OpenCV小练手】-仿造验证码去除干扰因子


    🤖🤖🤖🤖 欢迎浏览本博客 🤖🤖🤖🤖
    😆😆😆😆😆😆😆我是:我菜就爱学😆😆😆😆😆😆😆一名刚刚入行OpenCV的小白👻👻👻👻
    🔔🔔我菜就爱学,分享有误,欢迎大佬指出🔔🔔

    最近这几天一直在回顾OpenCV的相关知识点,也算是做一次简单的总结的吧。这次小项目主要是针对 形态学应用知识点做的回顾。首先是提取图像中的水平线和垂直线,然后利用类似原理,可以消除验证码上面的干扰项。

    操作步骤:

    • 1、读取图像
    • 2、转换为灰度图
    • 3、装换为二值图
    • 4、定义水平结构原始和垂直结构元素
    • 5、对图像处理:先腐蚀再膨胀(开运算)
    • 6、再来一个反转,把背景改成白的
    • 7、利用blur滤波,让图像更美观

    如下,首先提取下面图像的水平线:

    在这里插入图片描述

    1、读取图像

    Mat src, dst,grayImage;
    	src = imread("E:\\Pec\\形态学应用1.jpg");
    	namedWindow("原图", WINDOW_AUTOSIZE);
    	imshow("原图", src);
    	if (src.empty())
    	{
    		printf("图片读取错误!\n");
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2、转换为灰度图

    //灰度图转化
    	cvtColor(src, grayImage, COLOR_BGR2GRAY);
    
    • 1
    • 2

    3、装换为二值图

    //二值图
    	Mat threImage;
    	adaptiveThreshold(grayImage, threImage, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);
    	imshow("ee图", threImage);
    
    • 1
    • 2
    • 3
    • 4

    4、定义水平结构原始和垂直结构元素

    //水平结构元素
    	Mat hkernel = getStructuringElement(MORPH_RECT, Size(src.cols / 16, 1), Point(-1, -1));
    	//垂直结构元素
    	Mat wkernel = getStructuringElement(MORPH_RECT, Size(1, src.rows/16), Point(-1, -1));
    
    • 1
    • 2
    • 3
    • 4

    5、对图像处理:先腐蚀再膨胀(开运算)

    Mat eImage, dImage;
    	erode(threImage, eImage, wkernel);
    	dilate(eImage, dImage,wkernel);
    
    • 1
    • 2
    • 3

    6、再来一个反转,把背景改成白的

    bitwise_not(dImage,dImage);
    
    • 1

    7、利用blur滤波,让图像更美观

    blur(dImage, dImage, Size(3, 3), Point(-1, -1));
    	imshow("提取水平线", dImage);
    
    • 1
    • 2

    效果如下:

    在这里插入图片描述
    在这里插入图片描述

    验证码去除干扰项

    假设验证码的图片如下所示:

    在这里插入图片描述

    程序代码

    #include
    #include
    using namespace std;
    using namespace cv;
    int main()
    {
    	Mat src, dst,grayImage;
    	src = imread("E:\\Pec\\形态学应用2.jpg");
    	imshow("假设验证码图", src);
    	if (src.empty())
    	{
    		printf("图片读取错误!\n");
    	}
    	//灰度图转化
    	cvtColor(src, grayImage, COLOR_BGR2GRAY);
    	//二值图
    	Mat threImage;
    	adaptiveThreshold(grayImage, threImage, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY_INV, 17, 2);
    	Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5), Point(-1, -1));
    	Mat eimage, dimage;
    	erode(threImage, eimage, kernel);
    	dilate(eimage, dimage,kernel);
    	imshow("验证码去除干扰项", dimage);
    	waitKey(0);
    	return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    在这里插入图片描述

  • 相关阅读:
    Nginx: 413 – Request Entity Too Large Error and Solution
    【无标题】
    CSS基础 2
    【晚风摇叶之其他】抖音直播弹幕解析,连接websocket解析弹幕内容
    定制qga(作业截图)
    LongAdder原理浅析
    108 使用Ajax请求获取PHP自制接口
    pygame绘制梯形 使用polygon函数
    Oracle数据库中的集合(联合数组,嵌套表和可变数组)
    Node.js的基本使用(三)数据库与身份认证
  • 原文地址:https://blog.csdn.net/qq_44859533/article/details/126564095