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就可以找到了)
沒有留言:
張貼留言