嗚嗚喔學習筆記: OPENCV[放大失真校正][平滑處理+二值化]{cvSmooth()}

搜尋此網誌

2013年12月6日 星期五

OPENCV[放大失真校正][平滑處理+二值化]{cvSmooth()}

圖片放大會失真
最近看到一篇論文說可以用 平滑處理 + 二值化做處理 
所以就來試試看~~

在二值化 跟 平滑處理 參數做調整 依需求結果都會不一樣

程式碼: 


#include <iostream>
#include <stdio.h>
#include <cv.h>
#include <highgui.h>

using namespace cv ;
void BW(IplImage* img , int color)//二值化BW(,二值化參數) RGB<參數 RGB=255255255
{
  int Height=cvGetDimSize(img,0);//讀取矩陣高度
  int Width=cvGetDimSize(img,1);//讀取矩陣寬度

 
  for(int y = 0 ; y < Height ; y++)
      for(int x = 0 ; x < Width ; x++ )
      {
               if( !(cvGet2D(img, y , x ).val[2] < color && 
                     cvGet2D(img, y , x ).val[1] < color && 
                     cvGet2D(img, y , x ).val[0] < color))
                     cvSet2D(img,y,x,CV_RGB(255,255,255));//特別注意 給值是 (y,x)
               else
                     cvSet2D(img,y,x,CV_RGB(0,0,0));//特別注意 給值是 (y,x)

      }

}
int main()
{
           IplImage* img = cvLoadImage("D:/image/car/BO.png",1);//loading
           cvNamedWindow("img01",1);
           cvShowImage("img01", img);

           for(int i = 0; i < 4; i++)//計數
                     cvSmooth(img, img, CV_GAUSSIAN, 3, 0, 0);//平滑處理
          
           BW(img , 100);//二值化
           cvNamedWindow("img02",1);
           cvShowImage("img02", img);
           cvWaitKey(0);



}

結果: 左圖放大圖  右圖校正結果





參考資料:
http://tw.search.yahoo.com/r/_ylt=A2oKmJJHRaJShTQAMVlr1gt.;_ylu=X3oDMTE2MmE3YTc0BHNlYwNzcgRwb3MDNQRjb2xvA3NnMwR2dGlkA1ZJUFRXNDZfNDcx/SIG=146g51jc8/EXP=1386395079/**http%3a//ethesys.lib.mcu.edu.tw/ETD-db/ETD-search/getfile%3fURN=etd-0629105-163518%26filename=etd-0629105-163518.pdf







沒有留言:

張貼留言