關於我自己

2014年12月14日 星期日

OpenCV 身分證輪廓抽離

假設

1.鏡頭擷取距離固定不變

2.光源不變

身分證樣式用內政部拿來做身分證樣本的圖片

1.首先利用RGB分離

 

2.

code:

int main(int argc, char** argv)   
{
      IplImage* img = cvLoadImage("SS1.jpg");     
      IplImage *img01 =  cvCloneImage(img);
      cvNamedWindow("gray");
      cvNamedWindow("img");
      cvNamedWindow("img01");
      cvNamedWindow("img02");
      IplImage * gray=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
      cvCvtColor(img,gray,CV_RGB2GRAY);
      IplImage* pColorImg = cvCreateImage( cvGetSize(img), 8, 3 );
      CvMemStorage* storage = cvCreateMemStorage(0);
      CvSeq* lines = 0;
      cvErode(gray,gray,0,3);
      cvDilate(gray,gray,0,1);
      FillInternalContours(gray, 200,img01);
      IplImage *img02 =  cvCloneImage(img01);
      int Height=cvGetDimSize(gray,0);
      int Width=cvGetDimSize(gray,1);
      cvSetImageROI(img02, cvRect(0,0,Width,Height/2.5));
      // B G R
      cvAddS(img02, cvScalar(-255,-255,-255),img02); // 把值加入到另一個圖片裡
      cvResetImageROI(img02);
      cvShowImage("gray",gray);
      cvShowImage("img",img);
      cvShowImage("img01",img01);
      cvShowImage("img02",img02);
      cvWaitKey(0);
      cvDestroyWindow( "gray" );//銷毀視窗
      cvDestroyWindow( "img" );//銷毀視窗
      cvDestroyWindow( "img01" );//銷毀視窗
      cvDestroyWindow( "img02" );//銷毀視窗
      cvReleaseImage( &gray ); //釋放圖像
      cvReleaseImage( &img ); //釋放圖像
      cvReleaseImage( &img01 ); //釋放圖像
      cvReleaseImage( &img02 ); //釋放圖像
      return 0; 
    }

3.流程為圖示內所標示~

因為那些函式網路上已經有人有寫了~所以大約流程簡述一下

使用函式 cvErode ~  cvDilate ~  cvAbsDiff  ~ UnsharpMask ~ FillInternalContours

(google就可以找到了)


沒有留言:

張貼留言