• [置顶] ubuntu12.04下编译opencv程序


    ubuntu12.04下编译opencv程序

    1、在ubuntu下安装好 opencv后(建议使用apt-get install 来安装)

    2、使用程序FaceExaple.c来进行测试程序

    #include "cv.h"
    #include "highgui.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <assert.h>
    #include <math.h>
    #include <float.h>
    #include <limits.h>
    #include <time.h>
    #include <ctype.h>
     
    #ifdef _EiC
    #define WIN32
    #endif
     
    static CvMemStorage* storage = 0;
    static CvHaarClassifierCascade* cascade = 0;
     
    void detect_and_draw( IplImage* image );
     
    const char* cascade_name ="/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml";

     
    int main( int argc, char** argv )
    {
        CvCapture* capture = 0;
        IplImage *frame, *frame_copy = 0;
        int optlen = strlen("--cascade=");
        const char* input_name;
     
       
        cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );
     
        if( !cascade )
        {
            fprintf( stderr, "ERROR: Could not load classifier cascade " );
            fprintf( stderr,
            "Usage: facedetect --cascade="<cascade_path>" [filename|camera_index] " );
            return -1;
        }
        storage = cvCreateMemStorage(0);
     
        if( !input_name || (isdigit(input_name[0]) && input_name[1] == '') )
            capture = cvCaptureFromCAM( !input_name ? 0 : input_name[0] - '0' );
        else
            capture = cvCaptureFromAVI( input_name );
      
        cvNamedWindow( "result", 1 );

        if( capture )
        {
            for(;;)
            {
                if( !cvGrabFrame( capture ))
                    break;
                frame = cvRetrieveFrame( capture,0 );
                if( !frame )
                    break;
                if( !frame_copy )
                    frame_copy = cvCreateImage( cvSize(frame->width,frame->height),
                                                IPL_DEPTH_8U, frame->nChannels );
                if( frame->origin == IPL_ORIGIN_TL )
                    cvCopy( frame, frame_copy, 0 );
                else
                    cvFlip( frame, frame_copy, 0 );
     
                detect_and_draw( frame_copy );
     
                if( cvWaitKey( 10 ) >= 0 )
                    break;
            }
     
            cvReleaseImage( &frame_copy );
            cvReleaseCapture( &capture );
        }
        else
        {
            const char* filename = (char*)"lena.jpg";
            IplImage* image = cvLoadImage( filename, 1 );
     
            if( image )
            {
                detect_and_draw( image );
                cvWaitKey(0);
                cvReleaseImage( &image );
            }
            else
            {
                /* assume it is a text file containing the
                   list of the image filenames to be processed - one per line */
                FILE* f = fopen( filename, "rt" );
                if( f )
                {
                    char buf[1000+1];
                    while( fgets( buf, 1000, f ) )
                    {
                        int len = (int)strlen(buf);
                        while( len > 0 && isspace(buf[len-1]) )
                            len--;
                        buf[len] = '';
                        image = cvLoadImage( buf, 1 );
                        if( image )
                        {
                            detect_and_draw( image );
                            cvWaitKey(0);
                            cvReleaseImage( &image );
                        }
                    }
                    fclose(f);
                }
            }
     
        }
     
        cvDestroyWindow("result");
     
        return 0;
    }
     
    void detect_and_draw( IplImage* img )
    {
        static CvScalar colors[] =
        {
            {{0,0,255}},
            {{0,128,255}},
            {{0,255,255}},
            {{0,255,0}},
            {{255,128,0}},
            {{255,255,0}},
            {{255,0,0}},
            {{255,0,255}}
        };
     
        double scale = 1.3;
        IplImage* gray = cvCreateImage( cvSize(img->width,img->height), 8, 1 );
        IplImage* small_img = cvCreateImage( cvSize( cvRound (img->width/scale),
                             cvRound (img->height/scale)),
                         8, 1 );
        int i;
     
        cvCvtColor( img, gray, CV_BGR2GRAY );
        cvResize( gray, small_img, CV_INTER_LINEAR );
        cvEqualizeHist( small_img, small_img );
        cvClearMemStorage( storage );
     
        if( cascade )
        {
            double t = (double)cvGetTickCount();
            CvSeq* faces = cvHaarDetectObjects( small_img, cascade, storage,
                                                1.1, 2, 0,cvSize(20, 20),cvSize(30, 30) );
            t = (double)cvGetTickCount() - t;
            printf( "detection time = %gms ", t/((double)cvGetTickFrequency()*1000.) );
            for( i = 0; i < (faces ? faces->total : 0); i++ )
            {
                CvRect* r = (CvRect*)cvGetSeqElem( faces, i );
                CvPoint center;
                int radius;
                center.x = cvRound((r->x + r->width*0.5)*scale);
                center.y = cvRound((r->y + r->height*0.5)*scale);
                radius = cvRound((r->width + r->height)*0.25*scale);
                cvCircle( img, center, radius, colors[i%8], 3, 8, 0 );
            }
        }
     
        cvShowImage( "result", img );
        cvReleaseImage( &gray );
        cvReleaseImage( &small_img );
    }

    3、编译程序

    <1>错误一

    gcc -o FaceExample FaceExample.c

    <2>错误二

    gcc `pkg-config opencv --cflags --libs opencv` -o FaceExample FaceExample.c

    以上原因都是由于头文件及库没有加载进去造成

    gcc `pkg-config opencv --cflags --libs opencv` -o FaceExample FaceExample.c -I /usr/local/include/opencv -L /usr/local/lib -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_gpu -lopencv_ts -lopencv_video -lopencv_objdetect -lopencv_ml -lpthread –lrt

    成功!

    4、运行程序 ./FaceExample

    5、可以看到效果了!

     

  • 相关阅读:
    LeetCode 42. Trapping Rain Water
    LeetCode 209. Minimum Size Subarray Sum
    LeetCode 50. Pow(x, n)
    LeetCode 80. Remove Duplicates from Sorted Array II
    Window10 激活
    Premiere 关键帧缩放
    AE 「酷酷的藤」特效字幕制作方法
    51Talk第一天 培训系列1
    Premiere 视频转场
    Premiere 暴徒生活Thug Life
  • 原文地址:https://www.cnblogs.com/riasky/p/3507305.html
Copyright © 2020-2023  润新知