1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 6667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611 7118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 158159160161162163164165166167168169 |
#ifdef time_run_cost double duration = static_cast<double> (Cv::gettickcount ()); time#endif cout << "filename=" << filename <<endl; Mat src = imread (filename, cv_load_image_color);if (Src.empty ()){cout << "Imread error!!!"; GetChar ();return -1; }#ifdef bob_dbg_com memset (Out_filename, 0, sizeof (out_filename)/ sizeof (char)); sprintf (Out_filename, "%s-%s.jpg", Out_name,"0-0src"); Imwrite (Out_filename, SRC);#endif //bob_dbg_com #if 0 int scalesize = 4; Resize (src, src, Size (src.cols/scalesize, Src.rows/scalesize),0, 0, Cv_inter_area); memset (Out_filename, 0, sizeof (out_filename)/ sizeof (char)); sprintf (Out_filename, "%s-%s.jpg", Out_name, "0-0src"); Imwrite (Out_filename, SRC);#endif #if 1 cout << "Cut ..." << Endl; int width = src.cols;int height = src.rows;float scale = 0.8; cout << "width=" << width << ", height=" << height << endl; rect rect(0, 0, width, height*scale); Mat imgcut;imgcut = src (rect). Clone ();#endif //mat imgcut = src; cout << "Filter ..." << Endl; //Filter2d (Imgcut, Imgcut,-1, kernel);Gaussianblur (Imgcut, Imgcut, Size (5, 5), 0, 0); //Blur (Imgcut, Imgcut, Size (5, 5));#if 0 cout << "Equalizehist ..." << Endl; Mat matoutequalizehist = Mat (Imgcut.size (), CV_8UC3);//iplimage* pimgoutequalizehist = Cvcreateimage (Cvsize (Cameraframe.cols, cameraframe.rows), IPL_DEPTH_8U, 3);Iplimage pimginequalizehist = (iplimage) (imgcut);//mat-> iplimageiplimage* pimgoutequalizehist = Equalizehistcolorimage (&pimginequalizehist); matoutequalizehist = Pimgoutequalizehist;//iplimage-Mat#endif // outMat imgsrc = Mat (Imgcut.size (), CV_8UC1); Imgcut.copyto (IMGSRC); Mat Imgcontour = Mat (Imgsrc.size (), CV_8UC1);#ifdef finger_extract_at_night cout << "Nigth,threshold ..." << Endl; Mat imgtmp;//= Mat (Imgcut.size (), CV_8UC1);Cvtcolor (IMGSRC, Imgtmp, Cv_rgb2gray), Cvthresholdotsu (& (Iplimage) imgtmp), & ((iplimage) imgtmp)); Imgtmp.copyto (Imgcontour);#Else cout << "Day,skin ..." << Endl; Mat imgSkin2 = Mat (Imgsrc.size (), CV_8UC1), iplimage* pImgSkin2 = Cvcreateimage (Cvsize (Imgsrc.cols, imgsrc.rows), Ipl_ DEPTH_8U,1);Iplimage PImg2 = (iplimage) (IMGSRC);//mat-> iplimageCvskinotsu (&pimg2, pImgSkin2); imgSkin2 = pImgSkin2;//iplimage-Mat//mat Imgskin = Mat (Imgsrc.size (), CV_8UC1);Imgskin2.copyto (Imgcontour);#endif ///////////////////////Contourscout << "Find contours ..." << Endl; vector<VECTOR<CV::P oint> > Contours; vector<vec4i> hierarchy;Findcontours (Imgcontour, contours, hierarchy,cv_retr_external, Cv_chain_approx_simple, CV::P oint (0, 0)); Sort (Contours.begin (), Contours.end (), comparecontourareas);int contours_num = Contours.size ();cout << "contours_num=" << contours_num << endl; #if 0 vector<Vector<point>>::const_iterator itcontours = Contours.begin (); //for (int i = 0; i < contours.size (); i++)For (; Itcontours! = Contours.end (); ++itcontours){cout << "Size:" << itcontours->size () << Endl; The number of points each profile contains }#endif #if 1 //usd //eliminate too short or too long contoursint cmin = 100; //Minimum contour length //int cmax=;//maximum contour lengthvector<Vector<point>>::const_iterator itc = Contours.begin (); While (itc! = Contours.end ()){//if (Itc->size () < Cmin | | itc->size () > Cmax)if (itc->size () < Cmin) {ITC = Contours.erase (ITC);}Else++ITC;} Contours_num = Contours.size ();cout << endl << "Contours_num after eliminate=" << contours_num << Endl; #endif //Extract the contour imgcout << "Extract contours ..." << Endl; if (contours_num >= 4) {Mat img1, Img2, IMG3, IMG4;std::VECTOR<CV::P oint> biggest1contour = contours[contours_num- 1]; std::VECTOR<CV::P oint> biggest2contour = Contours[contours_num- 2]; std::VECTOR<CV::P oint> biggest3contour = Contours[contours_num- 3]; std::VECTOR<CV::P oint> biggest4contour = Contours[contours_num- 4]; std::VECTOR<CV::P oint> smallestcontour = contours[0]; ExtractFingerImg2 (contours, imgsrc, IMG1, Contours_num,1); ExtractFingerImg2 (contours, imgsrc, Img2, Contours_num,2);ExtractFingerImg2 (contours, imgsrc, IMG3, Contours_num,3);ExtractFingerImg2 (contours, imgsrc, IMG4, Contours_num,4);}Else if (contours_num = = 3) {Mat img1, img2, IMG3;std::VECTOR<CV::P oint> biggest1contour = contours[contours_num- 1]; std::VECTOR<CV::P oint> biggest2contour = Contours[contours_num- 2]; std::VECTOR<CV::P oint> biggest3contour = Contours[contours_num- 3]; std::VECTOR<CV::P oint> smallestcontour = contours[0]; ExtractFingerImg2 (contours, imgsrc, IMG1, Contours_num,1);ExtractFingerImg2 (contours, imgsrc, Img2, Contours_num,2);ExtractFingerImg2 (contours, imgsrc, IMG3, Contours_num,3);}Else if (contours_num = = 2) {Mat img1, img2;std::VECTOR<CV::P oint> biggest1contour = contours[contours_num- 1]; std::VECTOR<CV::P oint> biggest2contour = Contours[contours_num- 2]; std::VECTOR<CV::P oint> smallestcontour = contours[0]; ExtractFingerImg2 (contours, imgsrc, IMG1, Contours_num,1);ExtractFingerImg2 (contours, imgsrc, Img2, Contours_num,2);}Else if (contours_num = = 1) {Mat img1;std::VECTOR<CV::P oint> biggest1contour = contours[contours_num- 1]; std::VECTOR<CV::P oint> smallestcontour = contours[0]; ExtractFingerImg2 (contours, imgsrc, IMG1, Contours_num,1);}Else{cout << "error" << Endl; }#ifdef time_run_cost Duration =static_cast<double> (Cv::gettickcount ())-duration; Duration/= cv::gettickfrequency ();//The elapsed time in MScout << "Time cost=" << duration << "s" <<Endl; #endif #ifdef bob_dbg_com memset (Out_filename, 0, sizeof (out_filename)/ sizeof (char)); sprintf (Out_filename, "%s-%s.jpg", Out_name, "4-imgcontoursinsrc"); Imwrite (Out_filename, IMGSRC);//imwrite ("4-imgcontoursinsrc.jpg", imgsrc);#endif //bob_dbg_com |