形态学边界提取 OpenCV getStructuringElement函数

Opencv中函数getStructuringElement()可以生成形态学操作中用到的核

//利用形态学的膨胀和腐蚀操作提取边界

#include "core/core.hpp"
#include "highgui/highgui.hpp"
#include "imgproc/imgproc.hpp"

using namespace cv;


int main(int argc,char *argv[])
{
	Mat image,imageGray,imageDilate,imageErode,imageBorder;
	image=imread(argv[1]);
	resize(image,image,Size(400,400));
	cvtColor(image,imageGray,CV_RGB2GRAY);

	//enum { MORPH_RECT=0, MORPH_CROSS=1, MORPH_ELLIPSE=2 };
	Mat element=getStructuringElement(1,Size(3,3),Point(-1,-1));
	dilate(imageGray,imageDilate,element,Point(-1,-1));
	erode(imageGray,imageErode,element,Point(-1,-1));
	imageBorder=imageDilate-imageErode;
	imshow("Source image",image);
	imshow("Dilate",imageDilate);
	imshow("Erode",imageErode);
	imshow("Border",imageBorder);	
	waitKey();
}

  

  

 


From 形态学边界提取


图像处理经常要用到形态学操作,其中首先要获取结构元素。包括结构元素的大小及形状。
自定义一个结构元素kernel,要声明一个Mat,然后对Mat的元素赋值;这种方法灵活但略显复杂。

OpenCV提供了一个函数getStructuringElement,可以获取常用的结构元素的形状:

              矩形(包括线形)、椭圆(包括圆形)及十字形。

              MORPH_RECT, MORPH_ELLIPSE, MORPH_CROSS

getStructuringElement的内部并没有什么优化实现,只是封装了一下功能。其原理同样是声明一个Mat,然后求形状,指定Mat的值。
十字形为单线宽。

形态学各种功能实现,都归结为腐蚀erode与膨胀dilate的组合。所以,接口函数morphologyEx的内部实现都是调用erode与dilate函数。

From OpenCV中获取不同形状的结构元素getStructuringElement


你可能感兴趣的:(opencv)