6基于opencv的形态学处理(一)腐蚀_膨胀

来源:互联网 发布:mac装双系统 编辑:程序博客网 时间:2024/05/29 03:39

形态学处理:腐蚀和膨胀

一、腐蚀函数erode

1.1示例

MatScrImage = imread("E:\\1TJQ\\Opencv\\Images\\image1.jpg");//读入图像

MatOutImage5;

erode(ScrImage, OutImage5, getStructuringElement(MORPH_RECT,Size(5, 5)));//腐蚀操作

1.2 erode ()函数各个参数详解

Ø  ScrImage:输入图像

Ø  OutImage3:输出图像

Ø  getStructuringElement(MORPH_RECT,Size(5, 5)):第三个参数,InputArray类型的kernel,腐蚀操作的内核。若为NULL时,表示的是使用参考点位于中心3x3的核。我们一般使用函数getStructuringElement配合这个参数的使用。getStructuringElement函数会返回指定形状和尺寸的结构元素(内核矩阵)。(具体看上文中浅出部分dilate函数的第三个参数讲解部分)

1.3函数getStructuringElement(MORPH_RECT,Size(5, 5))详解

1.3.1  getStructuringElement函数的第一个参数表示内核的形状,我们可以选择如下三种形状之一:

矩形:MORPH_RECT

交叉形:MORPH_CROSS

椭圆形:MORPH_ELLIPSE

而getStructuringElement函数的第二和第三个参数分别是内核的尺寸以及锚点的位置。

我们一般在调用erode以及dilate函数之前,先定义一个Mat类型的变量来获得getStructuringElement函数的返回值。对于锚点的位置,有默认值Point(-1,-1),表示锚点位于中心。且需要注意,十字形的element形状唯一依赖于锚点的位置。而在其他情况下,锚点只是影响了形态学运算结果的偏移。

1.3.2 getStructuringElement函数相关的调用示例代码如下:

intg_nStructElementSize = 3; //结构元素(内核矩阵)的尺寸 

//获取自定义核 

Mat element =getStructuringElement(MORPH_RECT, 

    Size(2*g_nStructElementSize+1,2*g_nStructElementSize+1), 

Point(g_nStructElementSize, g_nStructElementSize )); 

 

二、膨胀函数dilate

1.1示例

MatScrImage = imread("E:\\1TJQ\\Opencv\\Images\\image1.jpg");//读入图像

MatOutImage5;

dilate(ScrImage, OutImage5, getStructuringElement(MORPH_RECT,Size(5, 5)));  //腐蚀操作

1.2 dilate ()函数各个参数详解

Ø  ScrImage:输入图像

Ø  OutImage3:输出图像

Ø  getStructuringElement(MORPH_RECT,Size(5, 5)):第三个参数,InputArray类型的kernel,膨胀操作的内核。若为NULL时,表示的是使用参考点位于中心3x3的核。我们一般使用函数getStructuringElement配合这个参数的使用。getStructuringElement函数会返回指定形状和尺寸的结构元素(内核矩阵)。(具体看上文中浅出部分erode函数的第三个参数讲解部分)

三、完整程序示例

#include <opencv2/core/core.hpp> 

#include <opencv2/imgproc/imgproc.hpp> 

#include <opencv2/opencv.hpp> 

 

#include <vector> 

#include <cstdio> 

 

using namespacestd;

using namespacecv;

 

int main()

{

   Mat ScrImage, ScrImgaeCopy1, OutImage, OutImage1, OutImage2,OutImage3, OutImage4, OutImage5, OutImage6, OutImage7, OutImage8, OutImage9;

   ScrImage = imread("E:\\1TJQ\\Opencv\\Images\\image1.jpg");//读入图像

  

   namedWindow("【原图】");

   imshow("【原图】", ScrImage);

  

   erode(ScrImage,OutImage5, getStructuringElement(MORPH_RECT,Size(5, 5)));//腐蚀操作

   dilate(ScrImage,OutImage6, getStructuringElement(MORPH_RECT,Size(5, 5)));  //膨胀操作

  

   namedWindow("【效果图erode");

   imshow("【效果图erode", OutImage5);

   namedWindow("【效果图dilate");

   imshow("【效果图dilate",OutImage6);

 

   waitKey(0);

   return NULL;

}

 

 参考内容:

http://www.cnblogs.com/mq0036/p/5902104.html 

阅读全文
0 0
原创粉丝点击