一般這兩個函式主要用來消除雜訊。利用腐蝕+擴張達到效果
那這程式碼主要拿來把已經邊緣化的停車格圖片
利用這兩個函式做停車格的前處理
那這程式碼主要拿來把已經邊緣化的停車格圖片
利用這兩個函式做停車格的前處理
實做 opencv 腐蝕 cvErode() 擴張 cvDilate() 函式的結果 :
程式碼 :
//
visual c++ express 2012 X opencv2.4.6
#include
<stdlib.h>
#include
<cv.h>
#include
<highgui.h>
#include
<iostream>
using
namespace
cv;
using
namespace
std ;
int main()
{
//宣告視窗
cvNamedWindow("input");
cvNamedWindow("output_Dilate");
cvNamedWindow("output_Erode");
cvNamedWindow("ED");
char
filename[] = {"D:/image/car/c_p200.png"}
;
//路徑
IplImage
*in= cvLoadImage(filename,0);//cvLoadImage(路徑,圖片種類)
//需設定為0 改成黑白圖像 才能辨識
IplImage
* erode = cvCloneImage(in); // 宣告等等要用來 腐蝕處理的圖片 並複製原圖給他
IplImage
* dilate = cvCloneImage(in); // 宣告等等要用來 擴張處理的圖片 並複製原圖給他
IplImage
* ED = cvCloneImage(in); // 宣告等等要用來 擴張+腐蝕處理的圖片 並複製原圖給他
//cvCloneImage(IplImage *) 是用來複製IplImage*
//對Dilate 這張圖片 擴張5次
cvDilate(dilate,dilate,0,5);//擴張(IplImage*,IplImage*,0,擴張次數)
//對erode 這張圖片 腐蝕5次
在這個結果裡
: 被腐蝕道都看不見了
cvErode(erode,erode,0,5);//腐蝕(IplImage*,IplImage*,0,腐蝕次數)
// 對圖片擴張5次在腐蝕5次 達到所要的效果
cvDilate(ED,ED,0,5);//擴張
cvErode(ED,ED,0,5);//cvErode(輸入圖像,輸出圖像,element,腐蝕的次數);
//輸出處理後的結果 並儲存
cvShowImage("input",in);//輸出處理前的圖片
cvShowImage("ED",ED);//輸出處理後的圖片
cvShowImage("output_Erode",erode);//輸出處裡腐蝕後的圖片
cvShowImage("output_Dilate",dilate);//輸出處裡擴張後的圖片
cvSaveImage("D:/image/car/ED01.jpg",
erode);//存檔
(路徑,IplImage*)
//wait for the user to hit a
key ,then clean up the window
cvWaitKey(0);
//釋放記憶體
cvDestroyWindow("input");//釋放記憶體
cvDestroyWindow("ED");//釋放記憶體
return 0;
}
結果 :
沒有留言:
張貼留言