嗚嗚喔學習筆記: 7月 2014

搜尋此網誌

2014年7月10日 星期四

OPENCV[腐蝕][擴張]{cvErode() and cvDilate() }

一般這兩個函式主要用來消除雜訊。利用腐蝕+擴張達到效果

那這程式碼主要拿來把已經邊緣化的停車格圖片 
利用這兩個函式做停車格的前處理



實做 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; 


}

結果 :