这篇文章将为大家详细讲解有关C++ OpenCV如何提取水平和垂直线,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
原理方法
图像形态学操作时候,可以通过自定义的结构元素实惠结构元素对输入图像一些对象敏感,另外一些不敏感,这样就会让敏感的对象改变而不敏感的对象保留输出,通过使用两个最基本的形态学操作--膨胀和腐蚀,使用不同的结构元素实现对输入图像的操作,得到想要的结果.
膨胀 , 输出的像素值是结构元素覆盖下输入图像的最大像素值
腐蚀 , 输出的图像值是结构元素覆盖下输入图像的最小像素值
提取方法
输入图像彩色图像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里面把后面的高度改为图像的五分之一
显示效果为
关于“C++ OpenCV如何提取水平和垂直线”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。