Opencv 利用膨胀腐蚀原理 (提取水平线,垂直线 及 去除线条 提取字母A)

今天正式开始学习 opencv ,每日做一些笔记,方便以后学习,同时也希望能够帮到大家。

好了,话不多说。

开始

原图:

Opencv 利用膨胀腐蚀原理 (提取水平线,垂直线 及 去除线条 提取字母A)_第1张图片

1.处理流程

读取图片 -> 灰度化 -> 二值图 -> 开运算。

#include 
#include 
#include 
#include 
using namespace cv;
int main()
{
     
	Mat dst, out, out2;
	Mat img = imread("1.png", 0);  //读取图片 转灰度图
	threshold(img, dst, 200, 240, THRESH_BINARY_INV); //二值图 
	Mat hkernel = getStructuringElement(MORPH_RECT, Size(1, 40)); //定义指定形状的窗口卷积
	Mat vkernel = getStructuringElement(MORPH_RECT, Size(40, 1));//定义指定形状的窗口卷积
	morphologyEx(dst, out, MORPH_OPEN, hkernel); //开运算
	morphologyEx(dst, out2, MORPH_OPEN, vkernel); //开运算
	imshow("q", out);
	waitKey(0);
	imshow("q", out2);
	waitKey(0);
}

运行图:

垂直线:
Opencv 利用膨胀腐蚀原理 (提取水平线,垂直线 及 去除线条 提取字母A)_第2张图片
水平线
Opencv 利用膨胀腐蚀原理 (提取水平线,垂直线 及 去除线条 提取字母A)_第3张图片

看这样子就提取出来了。

2.如何提取子母A?

垂直线做差 -> 水平线做差 -> 开运算 -> 膨胀。

#include 
#include 
#include 
#include 
using namespace cv;
int main()
{
     
	Mat dst, out, out2;
	Mat img = imread("1.png", 0);  //读取图片 转灰度图
	threshold(img, dst, 200, 240, THRESH_BINARY_INV); //二值图 
	Mat hkernel = getStructuringElement(MORPH_RECT, Size(1, 40)); //定义指定形状的窗口卷积
	Mat vkernel = getStructuringElement(MORPH_RECT, Size(40, 1));//定义指定形状的窗口卷积
	morphologyEx(dst, out, MORPH_OPEN, hkernel); //开运算
	morphologyEx(dst, out2, MORPH_OPEN, vkernel); //开运算
	subtract(dst, out, dst); //做差
	subtract(dst, out2, dst); //做差
	Mat close_ones = Mat::ones(Size(3, 3), CV_8UC1);
	morphologyEx(dst, dst, MORPH_OPEN, close_ones, Point(-1, -1), 1); //开运算
	dilate(dst, dst, close_ones); //膨胀
	imshow("1", dst);
	waitKey(0);
}

第一次做差 去除垂直线
Opencv 利用膨胀腐蚀原理 (提取水平线,垂直线 及 去除线条 提取字母A)_第4张图片
第二次做差 去除水平线
Opencv 利用膨胀腐蚀原理 (提取水平线,垂直线 及 去除线条 提取字母A)_第5张图片
开运算 去除噪点
Opencv 利用膨胀腐蚀原理 (提取水平线,垂直线 及 去除线条 提取字母A)_第6张图片
在来个膨胀
Opencv 利用膨胀腐蚀原理 (提取水平线,垂直线 及 去除线条 提取字母A)_第7张图片
OK ~

你可能感兴趣的:(Opencv,opencv)