cv riyo

14
COMPUTER VISION Tugas I SUWARIYONO (08043043) FAKULTAS TEKNIK JURUSAN INFORMATIKA

Transcript of cv riyo

Page 1: cv riyo

COMPUTER VISIONTugas I

SUWARIYONO

(08043043)

FAKULTAS TEKNIKJURUSAN INFORMATIKA

UNIVERSITAS BHAYANGKARA SURABAYA2011

Jawaban Soal NO.1

Cara Instal OpenCV

Page 2: cv riyo

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.

Page 3: cv riyo

4. Next lagi.

5. Kemudian klik next lagi.

Page 4: cv riyo

6. Kemudian klik install.

7. Tunggu proses install sampai selesai.

Page 5: cv riyo

8. Setelah proses selesai, kemudian klik finish.

Untuk menjalankan program Open CVnya

Page 6: cv riyo

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

Page 7: cv riyo

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. {

Page 8: cv riyo

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. {

Page 9: cv riyo

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. }

Page 10: cv riyo

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;

Page 11: cv riyo

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

Page 12: cv riyo