OpenCV 2014 8 25 IS Report No. 2014090201 Report Medical Information System Labratry
Abstract OpenCV OpenCV
1............................ 2 1.1 OpenCV.......................... 2 1.2...................... 2 2......................... 3 3............................ 5 3.1.......................... 5 3.2.......................... 5 3.3........................... 5 3.4........................... 6 3.4.1....................... 7 3.4.2...................... 7 3.5......................... 9 3.6 ( ).......................... 9 3.7............................. 11
1 1.1 OpenCV OpenCV Intel C C++ Python Java Windows Linux BSD (OSS) C++ OpenCV GUI( ( ) ) 4 imgproc( ) highgui( ) objdetect( ) core( ) 1.2 0 2 (pixel) 0 255 0 255 3 0 255 3 R( )G( )B( ) (255, 0, 0) (0, 0, 255) (255, 255, 255) RGB 4 1) 2
2 while 1 #include "opencv2/objdetect/objdetect.hpp" 2 #include "opencv2/highgui/highgui.hpp" 3 #include "opencv2/imgproc/imgproc.hpp" 4 #include "opencv2/core/core.hpp" 5 6 using namespace std; 7 using namespace cv; 8 9 // @function main 10 int main( int argc, const char** argv ) 11 { 12 // -- 1. Definition 13 CvCapture* capture; 14 Mat frame; 15 16 // -- 2. Load the cascades (Only for face detection) 17 if(!face_cascade.load(face_cascade_name)) 18 { 19 printf("error loading1\n"); 20 return -1; 21 }; 22 23 // -- 3. Capture from camera and set size 24 capture = cvcapturefromcam( -1 ); 25 cvsetcaptureproperty( capture, CV_CAP_PROP_FRAME_WIDTH, 640 ); 26 cvsetcaptureproperty( capture, CV_CAP_PROP_FRAME_HEIGHT, 480 ); 27 28 // -- 4. Processing the video and show it 29 if( capture ) 30 { 31 while( true ) 32 { 33 Mat dst, gray_img; 34 Mat dst2(frame.rows*0.5, frame.cols*2.0, frame.type()); 35 vector <Rect > faces; 36 37 frame = cvqueryframe( capture ); 38 //Processing functions ----------------- 3
2 39 40 // --------------------------------------------- 41 char c = cvwaitkey( 50 ); 42 if( c == 27 ) break; 43 imshow( "output_window", frame ); 44 } 45 } 46 return 0; 47 } highgui.hpp 2. Load the cascades 4. Processing the video and show it std::vector<rect> faces; 1. cvcapturefromcam(-1) 0-1 2. cvsetcaptureproperty 3. cvqueryframe cvcapturefromcam while 4. cvwatikey ms () frame page per second fps 5. if( c == 27 ) break; char c = cvwaitkey( 50 ); esc while 4
3 2 Processing 3.1 RGB R G B NOT 1 dst = frame; Fig. 3.1.1 (a) (b) Fig. 3.1.1 ( ) 3.2 3 0 1-1 1 flip(frame, dst, 0); Fig. 3.2.1 3.3 5
3.4 3 (a) (b) (c) (d) Fig. 3.2.1 ( ) 1 resize(frame, dst2, dst2.size(), 0.5, 2, cv::inter_cubic); Fig. 3.3.1 (a) (b) Fig. 3.3.1 ( ) 3.4 6
3.4 3 3.4.1 1 GaussianBlur(frame, dst, Size(5, 5), 10, 10); Fig. 3.4.1 (a) (b) 5 (c) 11 Fig. 3.4.1 ( ) (3.1) f(x, y) = 1 2πσ 2 exp( x2 + y 2 2σ 2 ) (3.1) (3.1) σ Fig. 3.4.2 3 4 Y σ 5 X σ 3.4.2 1 bilateralfilter(frame, dst, 5, 50, 100); Fig. 3.4.3 f(i, j) g(i, j) (3.2) 7
3.4 3 1 2 1 16 16 16 2 4 16 16 2 16 1 2 1 16 16 16 6 4 24 6 1 4 1 256 256 256 256 256 4 16 24 16 4 256 256 256 256 256 36 24 6 256 256 256 256 256 4 16 24 16 256 256 256 256 6 4 4 256 1 4 1 256 256 256 256 256 (a) 3 3 (b) 5 5 Fig. 3.4.2 ( ) (a) (b) 5 (c) 11 Fig. 3.4.3 ( ) 8
3.5 3 g(x, y) = w w n= w n= w f(i + m, j + n) exp( m2 + n 2 ) exp( w w n= w n= w 2σ 2 1 exp( m2 + n 2 2σ1 2 ) exp( (f(i, j) f(i + m, j + n))2 2σ2 2 ) (f(i, j) f(i + m, j + n))2 2σ2 2 ) (3.2) w σ 1 σ 2 σ 2 3.5 1 cvtcolor(frame, dst, CV_BGR2GRAY); Fig. 3.5.1 (a) (b) Fig. 3.5.1 ( ) 2 RGB Y (3.3) Y = 0.299R + 0.587G + 0.114B (3.3) 3.6 ( ) 2 2 2 2 2 9
3.6 ( ) 3 3.5 gray img 2 1 threshold(gray_img, dst, 0, 255, cv::thresh_otsu); 2 Fig. 3.6.1 (a) (b) Fig. 3.6.1 2 ( ) t 2 n 1 m 1 σ 1 n 2 m 2 σ 2 n t m t σ t σw 2 σ 2 b σ 2 w = n 1 n 1 + n 2 σ 2 1 + n 2 n 1 + n 2 σ 2 2 (3.4) m t σ 2 b = n 1(m 1 m t ) 2 + n 2 (m 2 m t ) 2 n 1 + n 2 = n 1n 2 (m 1 m 2 ) 2 (n 1 + n 2 ) 2 (3.5) (3.5) m t = n 1m 1 + n 2 m 2 n 1 + n 2 (3.6) σ t σ 2 b = n 1n 2 (m 1 m 2 ) 2 (n 1 + n 2 ) 2 (3.7) σ 2 t = σ 2 b + σ2 w (3.8) 10
3.7 3 σb 2 σw 2 = σ2 b σ 2 t σ2 b (3.9) σ t σ b 2 n 1 n 2 (m 1 m 2 ) 2 (3.10) t n m (3.10) 3.7 OpenCV 2.5 gray img Haar-like 1 face_cascade.detectmultiscale(gray_img, faces, 1.1, 2, 0 CV_HAAR_SCALE_IMAGE, Size(200, 200)); 2 dst = frame; 3 for( size_t i = 0; i < faces.size(); i++ ) 4 { 5 Point center( faces[i].x + faces[i].width * 0.5, faces[i]. y + faces[i].height * 0.5 ); 6 ellipse( dst, center, Size(faces[i].width * 0.5, faces[i]. height * 0.5), 0, 0, 360, Scalar(255, 0, 255), 4, 8, 0 ); 7 } Fig. 3.7.1 (a) (b) Fig. 3.7.1 ( ) 11
3.7 3 OpenCV Fig. 3.7.2 Haar-like AdaBoost Learning images Input image Feature value Feature value Learning Recognition Result for learning Input image Fig. 3.7.2 ( 2) ) Fig. 3.7.3 Fig. 3.7.3 ( ) Fig. 3.7.4 Fig. 3.7.4 Haar-like 12 AdaBoost AdaBoost 12
3.7 3 Edge features Line features Center surround feature Fig. 3.7.4 Haar-like ( 2) ) 13
1),.., 2012. 2) slideshare 10 CV OpenCV. 14