标签:opencv 腐蚀 膨胀
腐蚀:
cvErode
锚点:用于判断的中心点
关心点:为0不关心,为1关心
腐蚀的时候锚点对准图像的像素,这个像素的值取锚点和关心点中的最小值,注意都是和原图像对比,前面因腐蚀变化的点不影响后面腐蚀的点
膨胀:
cvDilate
和腐蚀相反,取锚点和关心点中的最大值
程序:
代码:
#include "cv.h" #include "cxcore.h" #include "highgui.h" #include <iostream> int ErodeDilate(int argc,char** argv) { IplImage* image=cvLoadImage("e:\\picture\\5.JPG"); cvNamedWindow("src"); cvShowImage("src",image); //步骤1:创建自定义元素 int cols=4; //定义元素的列数 int rows=4; //定义元素的行数 int anchor_x=2; //定义锚点在这个元素中的x坐标,注意坐标从0开始 int anchor_y=2; //定义锚点的y坐标 int value[]={0,0,0,0, 0,0,1,0, 0,1,1,0, 0,0,0,0 }; IplConvKernel* element=cvCreateStructuringElementEx(cols,rows,anchor_x,anchor_y,CV_SHAPE_CUSTOM,value); //步骤2:先膨胀,取最大值,去掉黑色(小值)点 IplImage* DilateDst=cvCreateImage(cvGetSize(image),8,3); cvDilate(image,DilateDst,element,5); cvNamedWindow("DilateDst"); cvShowImage("DilateDst",DilateDst); //步骤3:再腐蚀,扩大小值(如黑色部分) IplImage* ErodeDst=cvCreateImage(cvGetSize(DilateDst),8,3); cvErode(DilateDst,ErodeDst,element,5); cvNamedWindow("ErodeDst"); cvShowImage("ErodeDst",ErodeDst); cvWaitKey(0); cvDestroyWindow("src"); cvDestroyWindow("DilateDst"); cvDestroyWindow("ErodeDst"); cvReleaseImage(&image); cvReleaseImage(&DilateDst); cvReleaseImage(&ErodeDst); return 0; }
本文出自 “flyclc” 博客,请务必保留此出处http://flyclc.blog.51cto.com/1385758/1540053
标签:opencv 腐蚀 膨胀
原文地址:http://flyclc.blog.51cto.com/1385758/1540053