void cvErode(IplImage* src, IplImage* dst, IplConvKernel* B=NULL, int iterations = 1)
腐蚀函数通常用来消除图像中的“斑点”噪声。将小的元素腐蚀掉,将大的元素放大(个人理解)。
膨胀函数通常用来找到连通分支。
(实验的效果是腐蚀让图像更暗,原本有差异的地方更明显;膨胀让图片亮度更高,图片连接更紧)
B——和,默认为3*3,参考点在中心。
可自定义核。
自定义函数为IplImage* 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用户自定义。
code:
int main()
{
IplImage *image = cvLoadImage("....jpg");
CvMat *imageR = cvCreateMat(512,512,CV_8UC3);
cvResize(image, imageR);
namedWindow("原图");
cvShowImage("原图",imageR);
// CvSize size = cvSize(512,512);
CvMat *imageD1 = cvCreateMat(512,512,CV_8UC3);
CvMat *imageD2 = cvCreateMat(512,512,CV_8UC3);
// IplImage *m = cvCreateImage(size, IPL_DEPTH_8U, 3);
IplConvKernel* kernel = cvCreateStructuringElementEx(5, 3, 2,1, CV_SHAPE_ELLIPSE);
cvErode(imageR,imageD1, kernel);
cvDilate(imageR,imageD2, kernel);
namedWindow("效果图1");
cvShowImage("效果图1", imageD1);
namedWindow("效果图2");
cvShowImage("效果图2", imageD2);
cvWaitKey(0);
cvDestroyAllWindows();
cvReleaseMat(&imageD1);
cvReleaseMat(&imageD2);
cvReleaseMat(&imageR);
cvReleaseImage(&image);
return 0;
}