算法:算法
从图像处理角度看,二值图像的腐蚀和膨胀就是将一个小型二值图(结构元素,通常为3*3大小)在一个大的二值图上逐点移动并进行比较,根据比较的结果做出相应处理而已。
膨胀算法:用3X3的结构元素,扫描二值图像的每个像素,用结构元素与其覆盖的二值图像作“与”运算,若是都为0,结构图像的该像素为0,不然为1.结果:使二值图像扩大一圈。
腐蚀算法:用3X3的结构元素,扫描二值图像的每个像素,用结构元素与其覆盖的二值图像作“与”运算,若是都为1,结构图像的该像素为1,不然为0.结果:使二值图像减少一圈。
ui
注意:spa
OpenCV里面的腐蚀膨胀都是针对 白色 目标区域的。code
说,膨胀使图像 变大一圈, 那是指 图像中的 白色目标区域 扩大了一圈~~~~~~腐蚀,亦然。it
====================================io
代码:图像处理
#include <stdio.h> #include <cv.h> #include <highgui.h> #include <cvaux.h> //必须引此头文件 <p> </p><p>#pragma comment(lib, "cv.lib") #pragma comment(lib, "cxcore.lib") #pragma comment(lib, "highgui.lib") </p>int main( int argc, char** argv ) { IplImage *img = cvLoadImage("rice.png",0); if(img == NULL) { printf("img load failed!\n"); return 0; } IplImage *img_erode = cvCreateImage(cvGetSize(img), 8, 1); IplImage *img_dilate = cvCreateImage(cvGetSize(img), 8, 1); cvErode( img,img_erode, NULL,1); //腐蚀 cvDilate( img,img_dilate, NULL,1); //膨胀 cvNamedWindow("img_erode"); cvNamedWindow("img_dilate"); cvShowImage("img_erode",img_erode); cvShowImage("img_dilate",img_dilate); cvWaitKey(-1); cvReleaseImage(&img_dilate); cvReleaseImage(&img_erode); cvDestroyAllWindows(); return 0; }