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

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

好了,话不多说。

开始

原图:

在这里插入图片描述

1.处理流程

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

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

运行图:

垂直线:
在这里插入图片描述
水平线
在这里插入图片描述

看这样子就提取出来了。

2.如何提取子母A?

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

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/core/core.hpp>
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 open_ones = Mat::ones(Size(3, 3), CV_8UC1);
	morphologyEx(dst, dst, MORPH_OPEN, open_ones, Point(-1, -1), 1); //开运算
	dilate(dst, dst, open_ones); //膨胀
	imshow("1", dst);
	waitKey(0);
}

第一次做差 去除垂直线
在这里插入图片描述
第二次做差 去除水平线
在这里插入图片描述
开运算 去除噪点
在这里插入图片描述
在来个膨胀
在这里插入图片描述
OK ~

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值