cv riyo

Post on 20-Feb-2015

41 views 4 download

Transcript of cv riyo

COMPUTER VISIONTugas I

SUWARIYONO

(08043043)

FAKULTAS TEKNIKJURUSAN INFORMATIKA

UNIVERSITAS BHAYANGKARA SURABAYA2011

Jawaban Soal NO.1

Cara Instal OpenCV

1. Klik Next.

2. Pilih I Agree.

3. Pilih Add OpenCV to the system PATH for all users dan centang ataupun tidak Create OpenCV Desktop Icon. Kemudian klik next.

4. Next lagi.

5. Kemudian klik next lagi.

6. Kemudian klik install.

7. Tunggu proses install sampai selesai.

8. Setelah proses selesai, kemudian klik finish.

Untuk menjalankan program Open CVnya

1. Untuk menjalankan program OpenCVnya, klik start kemudian pilih folder C samples seperti gambar dibawah ini.

2. Kemudian cari file facedetect.exe, kemudian jalan deh..

Jawaban Soal NO. 2

a. Sourcecode

b. #define CV_NO_BACKWARD_COMPATIBILITYc.d. #include "cv.h"e. #include "highgui.h"f.g. #include <iostream>h. #include <cstdio>i.j. #ifdef _EiCk. #define WIN32l. #endifm.n. using namespace std;o. using namespace cv;p.q. void detectAndDraw( Mat& img,r. CascadeClassifier& cascade, CascadeClassifier&

nestedCascade,s. double scale);t.u. String cascadeName =v. "../../data/haarcascades/haarcascade_frontalface_alt.xml";w. String nestedCascadeName =x. "../../data/haarcascades/haarcascade_eye_tree_eyeglasses.xml";y.z. int main( int argc, const char** argv )aa. {bb. CvCapture* capture = 0;cc. Mat frame, frameCopy, image;dd. const String scaleOpt = "--scale=";ee. size_t scaleOptLen = scaleOpt.length();ff. const String cascadeOpt = "--cascade=";gg. size_t cascadeOptLen = cascadeOpt.length();hh. const String nestedCascadeOpt = "--nested-cascade";ii. size_t nestedCascadeOptLen = nestedCascadeOpt.length();jj. String inputName;kk.ll. CascadeClassifier cascade, nestedCascade;mm. double scale = 1;nn.oo. for( int i = 1; i < argc; i++ )pp. {qq. if( cascadeOpt.compare( 0, cascadeOptLen, argv[i], cascadeOptLen ) ==

0 )rr. cascadeName.assign( argv[i] + cascadeOptLen );ss. else if( nestedCascadeOpt.compare( 0, nestedCascadeOptLen, argv[i],

nestedCascadeOptLen ) == 0 )tt. {

uu. if( argv[i][nestedCascadeOpt.length()] == '=' )vv. nestedCascadeName.assign( argv[i] + nestedCascadeOpt.length()

+ 1 );ww. if( !nestedCascade.load( nestedCascadeName ) )xx. cerr << "WARNING: Could not load classifier cascade for nested

objects" << endl;yy. }zz. else if( scaleOpt.compare( 0, scaleOptLen, argv[i], scaleOptLen ) == 0 )aaa. {bbb. if( !sscanf( argv[i] + scaleOpt.length(), "%lf", &scale ) || scale <

1 )ccc. scale = 1;ddd. }eee. else if( argv[i][0] == '-' )fff. {ggg. cerr << "WARNING: Unknown option %s" << argv[i] << endl;hhh. }iii. elsejjj. inputName.assign( argv[i] );kkk. }lll.mmm. if( !cascade.load( cascadeName ) )nnn. {ooo. cerr << "ERROR: Could not load classifier cascade" << endl;ppp. cerr << "Usage: facedetect [--cascade=\"<cascade_path>\"]\n"qqq. " [--nested-cascade[=\"nested_cascade_path\"]]\n"rrr. " [--scale[=<image scale>\n"sss. " [filename|camera_index]\n" ;ttt. return -1;uuu. }vvv.www. if( inputName.empty() || (isdigit(inputName.c_str()[0]) &&

inputName.c_str()[1] == '\0') )xxx. capture = cvCaptureFromCAM( inputName.empty() ? 0 :

inputName.c_str()[0] - '0' );yyy. else if( inputName.size() )zzz. {aaaa. image = imread( inputName, 1 );bbbb. if( image.empty() )cccc. capture = cvCaptureFromAVI( inputName.c_str() );dddd. }eeee. elseffff. image = imread( "lena.jpg", 1 );gggg.hhhh. cvNamedWindow( "result", 1 );iiii.jjjj. if( capture )kkkk. {llll. for(;;)mmmm. {

nnnn. IplImage* iplImg = cvQueryFrame( capture );oooo. frame = iplImg;pppp. if( frame.empty() )qqqq. break;rrrr. if( iplImg->origin == IPL_ORIGIN_TL )ssss. frame.copyTo( frameCopy );tttt. elseuuuu. flip( frame, frameCopy, 0 );vvvv.wwww. detectAndDraw( frameCopy, cascade, nestedCascade, scale );xxxx.yyyy. if( waitKey( 10 ) >= 0 )zzzz. goto _cleanup_;aaaaa. }bbbbb.ccccc. waitKey(0);ddddd. _cleanup_:eeeee. cvReleaseCapture( &capture );fffff. }ggggg. elsehhhhh. {iiiii. if( !image.empty() )jjjjj. {kkkkk. detectAndDraw( image, cascade, nestedCascade, scale );lllll. waitKey(0);mmmmm. }nnnnn. else if( !inputName.empty() )ooooo. {ppppp. /* assume it is a text file containing theqqqqq. list of the image filenames to be processed - one per line */rrrrr. FILE* f = fopen( inputName.c_str(), "rt" );sssss. if( f )ttttt. {uuuuu. char buf[1000+1];vvvvv. while( fgets( buf, 1000, f ) )wwwww. {xxxxx. int len = (int)strlen(buf), c;yyyyy. while( len > 0 && isspace(buf[len-1]) )zzzzz. len--;aaaaaa. buf[len] = '\0';bbbbbb. cout << "file " << buf << endl;cccccc. image = imread( buf, 1 );dddddd. if( !image.empty() )eeeeee. {ffffff. detectAndDraw( image, cascade, nestedCascade, scale

);gggggg. c = waitKey(0);hhhhhh. if( c == 27 || c == 'q' || c == 'Q' )iiiiii. break;jjjjjj. }

kkkkkk. }llllll. fclose(f);mmmmmm. }nnnnnn. }oooooo. }pppppp.qqqqqq. cvDestroyWindow("result");rrrrrr.ssssss. return 0;tttttt. }uuuuuu.vvvvvv. void detectAndDraw( Mat& img,wwwwww. CascadeClassifier& cascade, CascadeClassifier&

nestedCascade,xxxxxx. double scale)yyyyyy. {zzzzzz. int i = 0;aaaaaaa. double t = 0;bbbbbbb. vector<Rect> faces;ccccccc. const static Scalar colors[] = { CV_RGB(0,0,255),ddddddd. CV_RGB(0,128,255),eeeeeee. CV_RGB(0,255,255),fffffff. CV_RGB(0,255,0),ggggggg. CV_RGB(255,128,0),hhhhhhh. CV_RGB(255,255,0),iiiiiii. CV_RGB(255,0,0),jjjjjjj. CV_RGB(255,0,255)} ;kkkkkkk. Mat gray, smallImg( cvRound (img.rows/scale),

cvRound(img.cols/scale), CV_8UC1 );lllllll.mmmmmmm. cvtColor( img, gray, CV_BGR2GRAY );nnnnnnn. resize( gray, smallImg, smallImg.size(), 0, 0, INTER_LINEAR );ooooooo. equalizeHist( smallImg, smallImg );ppppppp.qqqqqqq. t = (double)cvGetTickCount();rrrrrrr. cascade.detectMultiScale( smallImg, faces,sssssss. 1.1, 2, 0ttttttt. //|CV_HAAR_FIND_BIGGEST_OBJECTuuuuuuu. //|CV_HAAR_DO_ROUGH_SEARCHvvvvvvv. |CV_HAAR_SCALE_IMAGEwwwwwww. ,xxxxxxx. Size(30, 30) );yyyyyyy. t = (double)cvGetTickCount() - t;zzzzzzz. printf( "detection time = %g ms\n",

t/((double)cvGetTickFrequency()*1000.) );aaaaaaaa. for( vector<Rect>::const_iterator r = faces.begin(); r !=

faces.end(); r++, i++ )bbbbbbbb. {cccccccc. Mat smallImgROI;dddddddd. vector<Rect> nestedObjects;

eeeeeeee. Point center;ffffffff. Scalar color = colors[i%8];gggggggg. int radius;hhhhhhhh. center.x = cvRound((r->x + r->width*0.5)*scale);iiiiiiii. center.y = cvRound((r->y + r->height*0.5)*scale);jjjjjjjj. radius = cvRound((r->width + r->height)*0.25*scale);kkkkkkkk. circle( img, center, radius, color, 3, 8, 0 );llllllll. if( nestedCascade.empty() )mmmmmmmm. continue;nnnnnnnn. smallImgROI = smallImg(*r);oooooooo. nestedCascade.detectMultiScale( smallImgROI,

nestedObjects,pppppppp. 1.1, 2, 0qqqqqqqq. //|CV_HAAR_FIND_BIGGEST_OBJECTrrrrrrrr. //|CV_HAAR_DO_ROUGH_SEARCHssssssss. //|CV_HAAR_DO_CANNY_PRUNINGtttttttt. |CV_HAAR_SCALE_IMAGEuuuuuuuu. ,vvvvvvvv. Size(30, 30) );wwwwwwww. for( vector<Rect>::const_iterator nr =

nestedObjects.begin(); nr != nestedObjects.end(); nr++ )xxxxxxxx. {yyyyyyyy. center.x = cvRound((r->x + nr->x + nr->width*0.5)*scale);zzzzzzzz. center.y = cvRound((r->y + nr->y + nr->height*0.5)*scale);aaaaaaaaa. radius = cvRound((nr->width + nr->height)*0.25*scale);bbbbbbbbb. circle( img, center, radius, color, 3, 8, 0 );ccccccccc. }ddddddddd. } eeeeeeeee. cv::imshow( "result", img ); fffffffff. }

b. Hasil Facedetect