前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++ OpenCV形态学操作--提取水平和垂直线

C++ OpenCV形态学操作--提取水平和垂直线

作者头像
Vaccae
发布2019-07-24 13:05:15
1.2K0
发布2019-07-24 13:05:15
举报
文章被收录于专栏:微卡智享微卡智享

原理方法

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

膨胀 , 输出的像素值是结构元素覆盖下输入图像的最大像素值

腐蚀 , 输出的图像值是结构元素覆盖下输入图像的最小像素值

提取方法

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

代码演示

新建一个项目opencv-0012,配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法.并加载我们常用的那个图片显示出来,这次我们加载的图像换了一张,因为原来的图像里面找不到水平和垂直的线,所以我们新换了一个图片

显示效果

根据上面写的提取方法顺序,我们写代码

1.先取灰度图像

显示效果

里面有个提示,当图像转为灰度或是二值图时,我们在Mat类型如果前面加上~就代表取反了,像刚才的代码里面我们显示的时候把dst前面加上~

显示效果如下:

2.转换为二值图像

把上面的灰度图像取反后我们再转换为二值图像

显示效果如下:

3.定义结构元素

//定义横线结构元素 cv::Mat hline = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(src.cols / 5, 1), cv::Point(-1, -1));

其实 Size里面src.cols/5我们是带表宽度为原图的5分之一长,如果不够五分之一长度就过滤掉,1是高度,所以这样就是一个横线的元素

4.进行开操作

显示效果

可以看到只保留了长度为图像五分之一长的横线.

取垂直线

我们把刚才的代码改造一下,让垂直和水平都显示出来

垂直线取法就是在Size里面把后面的高度改为图像的五分之一

显示效果为


-END-

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档