cvErode,是opencv库中的一个函数,对输入图像进行腐蚀操作,可以消除较小的点如噪音
如:
cvErode(pCutFrImg, pCutFrImg, 0, 1);//对输入图像进行腐蚀操作
函数特点
1.函数形式:void cvErode( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 );
2.函数可以是本地操作,不需另外开辟存储空间的意思。腐蚀可以重复进行 (iterations) 次. 对彩色图像,每个彩色通道单独处理。
3.一般和cvDilate一起使用;void cvDilate( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 );
一起使用的效果是:
cvErode()腐蚀后cvDilate()膨胀,叫作开操作,那些离散点或游丝线、毛刺就被过滤,
cvDilate()膨胀后cvErode()腐蚀,叫作闭操作,那些断裂处就被缝合。
函数参数说明:
src:输入图像.
dst:输出图像.
element:用于腐蚀的结构元素。若为 NULL, 则使用 3×3 长方形的结构元素
iterations:腐蚀的次数
函数 cvErode 对输入图像使用指定的结构元素进行腐蚀,该结构元素决定每个具有最小值像素点的邻域形状:
dst=erode(src,element): dst(x,y)=min((x',y') in element))src(x+x',y+y')
下面的程序将演示这两个函数,腐蚀和膨胀的过程:
1 #include "cv.h" 2 #include "cxcore.h" 3 #include "highgui.h" 4 int main(int argc,char** argv) 5 { 6 if(argc<2) 7 return 0; 8 int a=1; 9 int eIter=1,dIter=1,exitFlag=1; 10 IplImage *image,*image1,*image2; 11 image = cvLoadImage(argv[1]); 12 image1 = cvCreateImage(cvSize(image->width,image->height),8,1); 13 image2 = cvCreateImage(cvSize(image->width,image->height),8,1); 14 15 cvCvtColor(image,image1,CV_RGB2GRAY); 16 cvCvtColor(image,image2,CV_RGB2GRAY); 17 cvNamedWindow("image",1); 18 cvShowImage("image",image); 19 20 cvNamedWindow("Select",1); 21 cvCreateTrackbar("eIterations","Select",&eIter,20,0); 22 cvCreateTrackbar("dIterations","Select",&dIter,20,0); 23 cvNamedWindow("Erode",1); 24 cvNamedWindow("Dilate",1); 25 cvShowImage("Erode",image1); 26 cvShowImage("Dilate",image2); 27 cvWaitKey(0); 28 29 while(1) 30 { 31 //腐蚀,消除细小物质 32 cvErode(image1,image1,0,2); 33 34 cvShowImage("Erode",image1); 35 std::cout<<"Erode"<<std::endl; 36 37 a=cvWaitKey(0); 38 if((char) a == 'q') 39 break; 40 } 41 42 cvCopy(image1,image2); 43 a=1; 44 while(1) 45 { 46 //腐蚀,填充物体内细小物质 47 cvDilate(image2,image2,0,1); 48 49 cvShowImage("Dilate",image2); 50 std::cout<<"Dilate"<<std::endl; 51 52 a=cvWaitKey(0); 53 54 if((char) a == 'q') 55 break; 56 } 57 return 0; 58 }