🤖🤖🤖🤖 欢迎浏览本博客 🤖🤖🤖🤖
😆😆😆😆😆😆😆我是:我菜就爱学😆😆😆😆😆😆😆一名刚刚入行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
#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;
}