opencv学习笔记(十二)腐蚀和膨胀

这是一个先腐蚀后膨胀的程序。

#include <opencv2/opencv.hpp>
int main(int argc, char** argv)  
{  
    IplImage *image, *image1, *image2;  
    image = cvLoadImage("b.jpg");  
    image1 = cvCreateImage
            (cvSize(image->width, image->height), 8, 1);
     //创建首地址并分配存储空间 
    image2 = cvCreateImage
            (cvSize(image->width, image->height), 8, 1);  
    cvCvtColor(image, image1, CV_RGB2GRAY);
    //参数CV_RGB2GRAY是RGB到gray
    cvCvtColor(image, image2, CV_RGB2GRAY);  
    cvNamedWindow("image", 1);  
    cvShowImage("image", image);  

    cvNamedWindow("Erode_fushi", 1);  
    cvNamedWindow("Dilate_pengzhang", 1);  

    cvErode(image1, image1, 0, 1);        
    cvDilate(image2, image2, 0, 1);     

    cvShowImage("Erode_fushi", image1);  
    cvShowImage("Dilate_pengzhang", image2);  

    cvWaitKey(0); 
    cvReleaseImage(&image);
    cvReleaseImage(&image1);
    cvReleaseImage(&image2);
    cvDestroyAllWindows();
    return 0;  
}  

如果是彩色图像,各个通道单独处理。

1 cvErode()腐蚀

void cvErode(
IplImage* src,
IplImage* dst,
IplConvKernel* B=NULL,
int iterations=1
);
src:输入图像.
dst:输出图像.
B:核,默认为 NULL。若为NULL,则使用参考点位于中心的3×3 核
iterations:腐蚀的次数,默认为1

2 cvDilate()膨胀

void cvDilate(
IplImage* src,
IplImage* dst,
IplConvKernel* B=NULL,
int iterations=1
);
在试图找到连通分支(即具有相似颜色或强度的像素点的大块的互相分离的区域)时通常使用膨胀操作。因为在大多数情况下一个大区域可能被噪声、阴影等类似的东西分割成多个部分,而一次轻微的膨胀又将使这些部分“融合”在一起。

3 自定义核

我们不必局限于选择3×3方形的核,可以创建自定义的核。这样的核由cvCreateStructuringElementEx()函数创建,由cvReleaseStructuringElement()函数释放。

3.1 cvCreateStructuringElementEx()
创建结构元素
IplConvKernel* cvCreateStructuringElementEx(
int cols,
int rows,
int anchor_x,
int anchor_y,
int shape,
int* values=NULL
);
cols
结构元素的列数目
rows
结构元素的行数目
anchor_x
锚点的相对水平偏移量
anchor_y
锚点的相对垂直偏移量
shape
结构元素的形状,可以是下列值:
CV_SHAPE_RECT, 长方形元素;
CV_SHAPE_CROSS, 交错元素
CV_SHAPE_ELLIPSE, 椭圆元素;
CV_SHAPE_CUSTOM, 用户自定义元素。

这个函数其实我也不太明白,但是看了那么多解释,感觉百度百科的解释比较靠谱:
http://baike.baidu.com/view/4819443.htm#2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值