算法:算法
從圖像處理角度看,二值圖像的腐蝕和膨脹就是將一個小型二值圖(結構元素,通常爲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; }