腐蚀函数cvErode

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 }

 

 
  
 

转载于:https://www.cnblogs.com/yangxuebing/p/7307921.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值