1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 形态学处理:膨胀 腐蚀 开运算 闭运算 形态学梯度 顶帽 黑帽

形态学处理:膨胀 腐蚀 开运算 闭运算 形态学梯度 顶帽 黑帽

时间:2020-09-14 03:51:30

相关推荐

形态学处理:膨胀 腐蚀 开运算 闭运算 形态学梯度 顶帽 黑帽

形态学处理一 膨胀二 腐蚀三 开运算四 闭运算五 形态学梯度六 顶帽七 黑帽

形态学处理

一 膨胀

 代码:

#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <iostream>//-----------------------------------【命名空间声明部分】---------------------------------------// 描述:包含程序所使用的命名空间//----------------------------------------------------------------------------------------------- using namespace std;using namespace cv;//-----------------------------------【main( )函数】--------------------------------------------// 描述:控制台应用程序的入口函数,我们的程序从这里开始//-----------------------------------------------------------------------------------------------int main(){//载入原图 Mat image = imread("D:/srcPics/3.jpg");//创建窗口 namedWindow("【原图】膨胀操作");namedWindow("【效果图】膨胀操作");//显示原图imshow("【原图】膨胀操作", image);//进行膨胀操作 Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));Mat out;dilate(image, out, element);//显示效果图 imshow("【效果图】膨胀操作", out);waitKey(0);return 0;

运行结果:

二 腐蚀

代码:

//-----------------------------------【头文件包含部分】---------------------------------------// 描述:包含程序所依赖的头文件//---------------------------------------------------------------------------------------------- #include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <iostream>//-----------------------------------【命名空间声明部分】---------------------------------------// 描述:包含程序所使用的命名空间//----------------------------------------------------------------------------------------------- using namespace std;using namespace cv;//-----------------------------------【main( )函数】--------------------------------------------// 描述:控制台应用程序的入口函数,我们的程序从这里开始//-----------------------------------------------------------------------------------------------int main( ){//载入原图 Mat image = imread("1.jpg");//创建窗口 namedWindow("【原图】膨胀操作");namedWindow("【效果图】膨胀操作");//显示原图imshow("【原图】膨胀操作", image);//进行膨胀操作 Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));Mat out;dilate(image, out, element);//显示效果图 imshow("【效果图】膨胀操作", out);waitKey(0); return 0;}

三 开运算

本节的主角是OpenCV中的morphologyEx函数,它利用基本的膨胀和腐蚀技术,来执行更加高级的形态学变换,如开闭运算、形态学梯度、“顶帽”、“黑帽”等。

代码:

#include <opencv2/opencv.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>using namespace cv;//-----------------------------------【main( )函数】--------------------------------------------//描述:控制台应用程序的入口函数,我们的程序从这里开始//-----------------------------------------------------------------------------------------------int main( ){//载入原始图 Mat image = imread("1.jpg"); //工程目录下应该有一张名为1.jpg的素材图//创建窗口 namedWindow("【原始图】开运算"); namedWindow("【效果图】开运算"); //显示原始图 imshow("【原始图】开运算", image); //定义核Mat element = getStructuringElement(MORPH_RECT, Size(15, 15)); //进行形态学操作morphologyEx(image, image, MORPH_OPEN, element);//显示效果图 imshow("【效果图】开运算", image); waitKey(0); return 0; }

实质:

开运算,其实就是先腐蚀后膨胀的过程。

功能:

开运算可以用来消除小物体,在纤细点处分离物体,并且在平滑较大物体的边界的同时不明显改变其面积。

四 闭运算

代码:

#include <opencv2/opencv.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>using namespace cv;//-----------------------------------【main( )函数】------------------------------------------//描述:控制台应用程序的入口函数,我们的程序从这里开始//-----------------------------------------------------------------------------------------------int main( ){//载入原始图 Mat image = imread("1.jpg"); //工程目录下应该有一张名为1.jpg的素材图//创建窗口 namedWindow("【原始图】闭运算"); namedWindow("【效果图】闭运算"); //显示原始图 imshow("【原始图】闭运算", image); //定义核Mat element = getStructuringElement(MORPH_RECT, Size(15, 15)); //进行形态学操作morphologyEx(image, image, MORPH_CLOSE, element);//显示效果图 imshow("【效果图】闭运算", image); waitKey(0); return 0; }

先膨胀后腐蚀的过程称为闭运算。

功能:闭运算能够排除小型黑洞(黑色区域)。

五 形态学梯度

#include"opencv.hpp"#include"opencv2/opencv.hpp"using namespace cv;int main(){Mat image = imread("D:/srcPics/3.jpg");namedWindow("【原始图】");namedWindow("【效果图】");imshow("【原始图】", image);Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));morphologyEx(image, image, MORPH_GRADIENT, element);imshow("【效果图】", image);waitKey(0);return 0;}

形态学梯度是膨胀图与腐蚀图之差。

六 顶帽

#include <opencv2/opencv.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>using namespace cv;//-----------------------------------【main( )函数】------------------------------------------//描述:控制台应用程序的入口函数,我们的程序从这里开始//-----------------------------------------------------------------------------------------------int main( ){//载入原始图 Mat image = imread("1.jpg"); //工程目录下应该有一张名为1.jpg的素材图//创建窗口 namedWindow("【原始图】顶帽运算"); namedWindow("【效果图】顶帽运算"); //显示原始图 imshow("【原始图】顶帽运算", image); //定义核Mat element = getStructuringElement(MORPH_RECT, Size(15, 15)); //进行形态学操作morphologyEx(image, image, MORPH_TOPHAT, element);//显示效果图 imshow("【效果图】顶帽运算", image); waitKey(0); return 0; }

顶帽运算(Top Hat)**又常常被译为“礼帽”运算,是原图像与上文刚刚介绍的“开运算”的结果图之差。

作用:

因为开运算带来的结果是放大了裂缝或者是局部低亮度的区域。因此,从原图中减去开运算后的图,得到的效果图突出了比原图轮廓周围的区域更加明亮的区域,且这已操作与选择的核大小相关。

顶帽运算往往用来分离比临近点亮一些的斑块。在一幅图像具有大幅的背景,而微小物品比较有规律的情况下,可以使用顶帽运算进行背景提取。

七 黑帽

#include <opencv2/opencv.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>using namespace cv;//-----------------------------------【main( )函数】--------------------------------------------//描述:控制台应用程序的入口函数,我们的程序从这里开始//-----------------------------------------------------------------------------------------------int main( ){//载入原始图 Mat image = imread("1.jpg"); //工程目录下应该有一张名为1.jpg的素材图//创建窗口 namedWindow("【原始图】黑帽运算"); namedWindow("【效果图】黑帽运算"); //显示原始图 imshow("【原始图】黑帽运算", image); //定义核Mat element = getStructuringElement(MORPH_RECT, Size(15, 15)); //进行形态学操作morphologyEx(image, image, MORPH_BLACKHAT, element);//显示效果图 imshow("【效果图】黑帽运算", image); waitKey(0); return 0; }

黑帽运算是闭运算的结果图与原图像之差。

黑帽运算后的效果图突出了比原图轮廓周围的区域更暗的区域,且这一操作和选择的核的大小相关。

所以,黑帽运算用来分离比邻近点暗一些的斑块,效果图有着非常完美的轮廓。

注:

这一章节的核心API函数:morphologyEx()

以上是我根据OpenCV3.0总结的形态学相关内容,方便以后自己调用。

个人公众号:视觉IMAX

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。