zoukankan      html  css  js  c++  java
  • [置顶] 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、可以看到效果了!

     

  • 相关阅读:
    Java for LeetCode 229 Majority Element II
    Java for LeetCode 228 Summary Ranges
    Java for LeetCode 227 Basic Calculator II
    Java for LintCode 颜色分类
    Java for LintCode 链表插入排序
    Java for LintCode 颠倒整数
    Java for LintCode 验证二叉查找树
    Java for LeetCode 226 Invert Binary Tree
    Java for LeetCode 225 Implement Stack using Queues
    Java for LeetCode 224 Basic Calculator
  • 原文地址:https://www.cnblogs.com/riasky/p/3507305.html
Copyright © 2011-2022 走看看