形态学操作之提取水平与垂直直线

检测原理

图像形态学操作,可以通过自定义的结构元素实现结构元素对输入图像一些对象敏感、另外一些对象不敏感,这样就会让敏感的对象改变而不敏感的对象保留输出。通过使用两个最基本的形态学操作:“膨胀”与“腐蚀”,使用不同的结构元素实现对输入图像的操作、得到想要的结果。

  1. 膨胀:输出的像素值是结构元素覆盖下输入图像的最大像素值;
  2. 腐蚀:输出的像素值是结构元素覆盖下输入图像的最小像素值。

二值图像与灰度图像上的膨胀操作

二值图像与灰度图像上的腐蚀操作

结构元素

上述膨胀与腐蚀过程可以使用任意的结构元素,常见的结构元素形状有:矩形、圆、直线、磁盘形状、砖石头、形状等各种自定义形状。

提取过程

  1. 输入彩色图像-imread
  2. 转换为灰度图像-cvtColor
  3. 转换为二值图像-adaptiveThreshold
  4. 定义结构元素
  5. 开操作(腐蚀+膨胀)提取水平与垂直直线

#include <opencv2\opencv.hpp>

#include <iostream>

using namespace std;

using namespace cv;

const char * input = "input image";

const char *output = "output image";

void main()

{

Mat srcImg, grayImg, binImg, tempImg,resImg;

srcImg = imread("chars.png");

if (!srcImg.data)

{

cout << "error image data" << endl;

return;

}

namedWindow(input, WINDOW_AUTOSIZE);

imshow(input, srcImg);

//convert to grayImg

if (srcImg.channels() == 3)

{

cvtColor(srcImg, grayImg, CV_BGR2GRAY);

}

else

{

grayImg = srcImg;

}

//convert to  binaryImg

adaptiveThreshold(~grayImg, binImg, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);

//create struct element

int xSize =binImg.cols/180 ;

int ySzie = binImg.rows/180;

Mat horizonLine = getStructuringElement(MORPH_RECT, Size(xSize, 1), Point(-1, -1));

Mat verticalLine = getStructuringElement(MORPH_RECT, Size(1, ySzie), Point(-1, -1));

//open operation, 提取水平直线

//erode(binImg, tempImg, horizonLine);

//dilate(tempImg, resImg, horizonLine);

//morphologyEx(binImg, resImg, CV_MOP_OPEN, horizonLine); //morphologyEx==erode+dilate

/*提取字符*/

Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));

morphologyEx(binImg, resImg, CV_MOP_OPEN, kernel);

bitwise_not(resImg, resImg);

blur(resImg, resImg, Size(3, 3), Point(-1, -1));

imshow(output, resImg);

waitKey(0);

return;

}

字符提取效果如图:

形态学操作之提取水平与垂直直线相关推荐

  1. OpenCV 形态学操作应用——提取水平与垂直线

    文章目录 原理方法 提取步骤 输入图像彩色图像 `imread` 转换为灰度图像 – `cvtColor` 转换为二值图像 – `adaptiveThreshold` 定义结构元素: 开操作 (腐蚀+ ...

  2. opencv学习-形态学操作应用-提取图片中的文字

    提取图片中的文字 一.步骤 1.读取原图 2.灰度化 3.二值化 4.膨胀 5.腐蚀 6.像素值取反 二.全部代码 #include<iostream> #include<openc ...

  3. Opencv---通过形态学操作提取水平和垂直线

    OpenCV通过使用形态学操作来提取水平和垂直线 目标 在本教程中,您将学习如何: 应用两个非常常见的形态运算符(即扩张和侵蚀),创建自定义内核,以便在水平轴和垂直轴上提取直线.为此,您将使用以下Op ...

  4. 基于形态学操作提取水平和垂直线条(五线谱中音符和乐谱线的分离)

    目的: 结合自定义核,应用两个非常常见的形态学算子(例如,扩张和侵蚀),提取水平和垂直方向的线条.将会用到以下OpenCV函数: cv::erode cv::dilate cv::getStructu ...

  5. 眼底视网膜血管增强方法(三)形态学操作

    眼底视网膜血管增强方法(三)形态学操作 在图像处理中,我们经常把数学形态学作为工具用于图像的相关属性提取,或者对图像进行预处理和后处理.形态学的基本操有腐蚀.膨胀.开操作.闭操作.顶帽等. 形态学的基 ...

  6. opencv入门_【OpenCV入门之十八】通过形态学操作提取水平与垂直线

    小白导读 学习计算机视觉最重要的能力应该就是编程了,为了帮助小伙伴尽快入门计算机视觉,小白准备了[OpenCV入门]系列.新的一年文章的内容进行了很大的完善,主要是借鉴了更多大神的文章,希望让小伙伴更 ...

  7. 【python OpenCV3.3 图像处理教程:直线检测、圆检测、对象测量、腐蚀、膨胀等形态学操作、数字验证码识别、人脸检测

    1. 直线检测 Hough Line Transform:前提:边缘检测已经完成,基于霍夫变换 1.1 原理 可以通过(theta,r)唯一表示一个点. 把过三个点的全部直线以某一角度全部计算出来,如 ...

  8. OpenCV通过形态学操作提取水平线和垂直线

    OpenCV通过形态学操作提取水平线和垂直线 通过形态学操作提取水平线和垂直线 目标 理论 形态学运算 结构元素 代码 说明/结果 载入图片 灰阶 灰度到二进制图像 输出图像 结构要素 优化边缘/结果 ...

  9. 【OpenCV学习】第9课:形态学操作的应用-提取水平线丶垂直线

    仅自学做笔记用,后续有错误会更改 理论 图像在进行形态学操作的时候, 可以通过自定义的结构元素实现结构元素对输入图像的一些对象敏感丶对另外一些对象不敏感, 这样就会让敏感的对象改变而不敏感的对象保留输 ...

最新文章

  1. 标准功能模块组件 -- 内部联络单组件,内部邮件组件,提高多人异地协同办公效率...
  2. Build boost 1.66.0 with c++11
  3. 电子火折子的原理,了解一下?
  4. python3操作MySQL:查询
  5. Ajax框架DWR入门
  6. 字符数组,字符串、数字转化
  7. Springboot整合Websocket遇到的坑_websocket session不支持序列化,无法存储至redis_Websocket相关问题总结(Session共享,用户多端登录等)
  8. AI专家一席谈:复用算法、模型、案例,AI Gallery带你快速上手应用开发
  9. 信号方面概念解释(笔记04)
  10. java速成----一篇博文搞定基础
  11. 云EC电商cms安装
  12. python调用 ole:win32com用法详解
  13. 【引用】教你会看电脑的配置
  14. 【双拼打字】双拼对照表
  15. 单一世界架构初探之世界地图
  16. c#实现钉钉免登功能
  17. CSDN直播预告丨“0成本”、可二次开发的开源OA开发平台,你是时候来了解下了!
  18. att汇编教程 linux,att 汇编 helloworld
  19. 计算机视觉-深度学习图像检测方法梳理
  20. 5月26日参观长治博物馆有感

热门文章

  1. Linux 命令(32)—— grep 命令
  2. vue入门:(class与style绑定)
  3. Zabbix 触发器函数方法整理
  4. 无监督学习:Linear Dimension Reduction(线性降维)
  5. [BZOJ1968][AHOI2005]COMMON约数研究 数学
  6. 在线JSON转HTML,TABLE表格工具
  7. linux之我常用的20条命令(之一)
  8. Float,Double单双精度在线转换成二进制
  9. 关于BeanUtils.copyProperties的用法和优缺点
  10. C#对象序列化与反序列化zz