opencv学习笔记10-提取水平与垂直线

只用来记录学习笔记

准备工作:
步骤1-变灰度图像

Mat gray_src;
cvtColor(src, gray_src, CV_BGR2GRAY); //转灰度
imshow("gray image", gray_src); //输出灰度图像

步骤2-变成二值图像

Mat binImg;
adaptiveThreshold(~gray_src, binImg, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2); //转换为二值图像
imshow("bin image", binImg);

~gray_src:表示反转,就是变成黑底白线
binImg:
255:二值图像最大值
ADAPTIVE_THRESH_MEAN_C:自适应方法,ADAPTIVE_THRESH_MEAN_C, ADAPTIVE_THRESH_GAUSSIAN_C 二选一
THRESH_BINARY: 阈值类型
15:块大小
-2:常量C 可以是正数,0,负数

效果图
opencv学习笔记10-提取水平与垂直线_第1张图片
1.提取水平线

Mat hline = getStructuringElement(MORPH_RECT, Size(src.cols / 16, 1), Point(-1, -1)); //水平结构元素

方法一:

Mat temp;
erode(binImg, temp, hline);//先腐蚀
dilate(temp,dst,hline); //后膨胀
imshow("Final image1", temp); //开操作的结果图

方法二:

morphologyEx(binImg, dst, CV_MOP_OPEN, hline);

opencv学习笔记10-提取水平与垂直线_第2张图片

2.提取竖直线

Mat vline = getStructuringElement(MORPH_RECT, Size(1, src.rows / 16), Point(-1, -1));  //竖直结构元素
Mat temp;
erode(binImg, temp, vline );//先腐蚀
dilate(temp,dst,vline ); //后膨胀
imshow("Final image1", temp); //开操作的结果图

也有两种方法
效果图:
opencv学习笔记10-提取水平与垂直线_第3张图片

demo:
图片验证码去线条
使用的是3*3结构元素

Mat cline = getStructuringElement(MORPH_RECT, Size(3,3), Point(-1, -1));  //3*3结构元素
Mat temp2;
erode(binImg, temp2, cline); //binImg是二值图像
dilate(temp2, dst, cline);
imshow("Final image2", dst);

效果图:
在这里插入图片描述

你可能感兴趣的:(opencv)