C++OpenCV如何提取水平和垂直线

这篇文章将为大家详细讲解有关C++ OpenCV如何提取水平和垂直线,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

成都创新互联公司2013年开创至今,先为广汉等服务建站,广汉等地企业,进行企业商务咨询服务。为广汉企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

原理方法

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

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

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

提取方法

  • 输入图像彩色图像imread

  • 转换为灰度图像 -- cvtColor

  • 转换为二值图像 -- adaptiveThreshold

  • 定义结构元素

  • 开操作(腐蚀+膨胀)提取水平与垂直线

C++ OpenCV如何提取水平和垂直线

代码演示

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

C++ OpenCV如何提取水平和垂直线

显示效果

C++ OpenCV如何提取水平和垂直线

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

1.先取灰度图像

C++ OpenCV如何提取水平和垂直线

显示效果

C++ OpenCV如何提取水平和垂直线

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

C++ OpenCV如何提取水平和垂直线

显示效果如下:

C++ OpenCV如何提取水平和垂直线

2.转换为二值图像

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

C++ OpenCV如何提取水平和垂直线

显示效果如下:

C++ OpenCV如何提取水平和垂直线

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.进行开操作

C++ OpenCV如何提取水平和垂直线

显示效果

C++ OpenCV如何提取水平和垂直线

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

取垂直线

C++ OpenCV如何提取水平和垂直线

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

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

显示效果为

C++ OpenCV如何提取水平和垂直线


关于“C++ OpenCV如何提取水平和垂直线”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。


标题名称:C++OpenCV如何提取水平和垂直线
文章地址:http://pwwzsj.com/article/jgdgps.html