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

news/2024/7/21 7:11:11 标签: 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");
	}

2、转换为灰度图

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

3、装换为二值图

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

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));

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

Mat eImage, dImage;
	erode(threImage, eImage, wkernel);
	dilate(eImage, dImage,wkernel);

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

bitwise_not(dImage,dImage);

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

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

效果如下:

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

验证码去除干扰项

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

在这里插入图片描述

程序代码

#include<opencv2/opencv.hpp>
#include<iostream>
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;
}

在这里插入图片描述


http://www.niftyadmin.cn/n/1815385.html

相关文章

什么是ETF

什么是ETF 如果你是一个基金投资者,那么你一定会查看基金净值.目前在净值表上排列第一的基金是180ETF,净值已经超过5元了.那么什么是ETF呢? 一、ETF概念  ETF&#xff0c;从本质上说&#xff0c;是开放式基金和封闭式基金的一种技术上的结合&#xff0c;而且还有所超越。 …

天气插件

有时候我们需要在网站上加上一栏关于天气预报的栏目&#xff0c;我们可以通过webservices去实现天气预报的接口&#xff0c;还有一种就是定制天气预报的插件&#xff0c;通过框架加上这个插件就可以而了 转载于:https://www.cnblogs.com/shuang121/archive/2011/03/07/1974608.…

调用静态的动态链接库,需要在Link中添加相应的Lib库

居然会把这个也忘记了&#xff0c;呵呵 转载于:https://www.cnblogs.com/Jasmin/archive/2007/03/08/668464.html

【Qt】Qt下配置OpenCV

&#x1f916;&#x1f916;&#x1f916;&#x1f916; 欢迎浏览本博客 &#x1f916;&#x1f916;&#x1f916;&#x1f916; &#x1f606;&#x1f606;&#x1f606;&#x1f606;&#x1f606;&#x1f606;&#x1f606;我是&#xff1a;我菜就爱学&#x1f606;&…

js里面函数的内部属性

1.arguments用來存放传输参数的集合&#xff0c;可以被调用多次&#xff0c;每次数組都不一样&#xff0c;增强了函数的强壮性 实例&#xff1a; function calc() { var sum 0; /*参数为一个时候*/ if (arguments.length 1) { sum arguments[0] }…

3686

1 /*2 这个题目有点意思&#xff0c;并不是求总共需要多长时间来完成订单&#xff0c;3 而是要求完成顶点的总时间。4 5 这个总时间是包括订单的等待时间的6 7 因为有可能有多个订单都要到工厂j去完成&#xff0c;那么就浪费了很多时间&#xff0c;这些时间也算是总时间里面的8…

c#中正则表达中特殊字符的转义!

今天&#xff0c;用到了““的转义。网上搜了一下&#xff0c;发现一篇文章。列举了大多数的特殊字符。特给自己和大家留个记号。 在.NET Framework 开发人员指南 的 字符转义 一节 有这样一段话。除 .$ ^ { [ ( | ) * ? \ 外&#xff0c;其他字符与自身匹配。但是其中并未…

批评:上海电信业不可被漂亮数据蒙住双眼

借着“世博会”的西风&#xff0c;2010年&#xff0c;上海市电信家产交出的答卷令人相当对劲。虽然利润持续下滑&#xff0c;但快要千亿元的营业总量&#xff0c;足以让上海市的电信业持续处于世界“领头羊”的职位地方。不外&#xff0c;日子并非就此无忧无虑。我们需要清醒地…