图像腐蚀和膨胀混合运用经常应用在图像去噪,和骨架提取等场合。接下来的例子是运用图像腐蚀和膨胀进行去噪的例程:
简单的图像去噪过程就是:先对图像进行腐蚀,然后再进行膨胀。
代码如下:
#include "cv.h"
#include "highgui.h"
void main()
{
IplImage *src = cvLoadImage("G:\\Opencv\\素材\\腐蚀膨胀练习1.jpg");
IplImage *dst = cvCreateImage(cvGetSize(src), 8, 3); //用于储存腐蚀后的图像
IplImage *dst2 = cvCreateImage(cvGetSize(src), 8, 3); //用于储存膨胀后的图像
cvNamedWindow("源图像");
cvShowImage("源图像", src);
int value[36] = {
1, 1, 1, 1, 1, 0,
1, 1, 1, 1, 1, 0,
1, 1, 1, 1, 1, 0,
1, 1, 1, 1, 1, 0,
1, 1, 1, 1, 1, 0,
0, 0, 0, 0, 0, 0,
};
/*设置结构元素的列数 行数 和锚点坐标*/
int clos = 6, rows = 6, anchor_x = 4, anchor_y = 4;
IplConvKernel *element;
element = cvCreateStructuringElementEx(clos, rows, anchor_x, anchor_y, CV_SHAPE_CUSTOM, value);
/*腐蚀*/
cvErode(src, dst, element, 1);
cvNamedWindow("腐蚀后");
cvShowImage("腐蚀后", dst);
/*膨胀*/
cvDilate(dst, dst2, element, 1);
cvNamedWindow("膨胀后");
cvShowImage("膨胀后", dst2);
cvWaitKey(0);
}
从左到右的图像依次为:源图像,腐蚀后的图像,膨胀后的图像。
可以看出,经过简单去噪,可以去除源图像上一些细小的点。