2012-07-03 1 views
4

Я пытаюсь построить следующий код:неопределенные символы для архитектуры x86_64: «_cvHaarDetectObjects» Eclipse

#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> 


// Create a string that contains the exact cascade name 
const char* cascade_name = "/usr/share/src/OpenCV-2.3.1/data/haarcascades/haarcascade_frontalface_alt.xml"; 
// "C:/Program Files/OpenCV/data/haarcascades/haarcascade_frontalface_alt.xml"; 
/* "haarcascade_profileface.xml";*/ 


// Function prototype for detecting and drawing an object from an image 
void detect_and_draw(IplImage* image); 

// Main function, defines the entry point for the program. 
int main(int argc, char** argv) 
{ 

    // Create a sample image 
    IplImage *img = cvLoadImage("1.pgm"); 

    // Call the function to detect and draw the face positions 
    detect_and_draw(img); 

    // Wait for user input before quitting the program 
    cvWaitKey(); 

    // Release the image 
    cvReleaseImage(&img); 

    // Destroy the window previously created with filename: "result" 
    cvDestroyWindow("result"); 

    // return 0 to indicate successfull execution of the program 
    return 0; 
} 

// Function to detect and draw any faces that is present in an image 
void detect_and_draw(IplImage* img) 
{ 

    // Create memory for calculations 
    static CvMemStorage* storage = 0; 

    // Create a new Haar classifier 
    static CvHaarClassifierCascade* cascade = 0; 

    int scale = 1; 

    // Create a new image based on the input image 
    IplImage* temp = cvCreateImage(cvSize(img->width/scale,img->height/scale), 8, 3); 

    // Create two points to represent the face locations 
    CvPoint pt1, pt2; 
    int i; 

    // Load the HaarClassifierCascade 
    cascade = (CvHaarClassifierCascade*)cvLoad(cascade_name, 0, 0, 0); 

    // Check whether the cascade has loaded successfully. Else report and error and quit 
    if(!cascade) 
    { 
     fprintf(stderr, "ERROR: Could not load classifier cascade\n"); 
     return; 
    } 

    // Allocate the memory storage 
    storage = cvCreateMemStorage(0); 

    // Create a new named window with title: result 
    cvNamedWindow("result", 1); 

    // Clear the memory storage which was used before 
    cvClearMemStorage(storage); 

    // Find whether the cascade is loaded, to find the faces. If yes, then: 
    if(cascade) 
    { 

     // There can be more than one face in an image. So create a growable sequence of faces. 
     // Detect the objects and store them in the sequence 
     CvSeq* faces = cvHaarDetectObjects(img, cascade, storage, 
              1.1, 2, CV_HAAR_DO_CANNY_PRUNING, 
              cvSize(40, 40)); 

     // Loop the number of faces found. 
     for(i = 0; i < (faces ? faces->total : 0); i++) 
     { 
      // Create a new rectangle for drawing the face 
      CvRect* r = (CvRect*)cvGetSeqElem(faces, i); 

      // Find the dimensions of the face,and scale it if necessary 
      pt1.x = r->x*scale; 
      pt2.x = (r->x+r->width)*scale; 
      pt1.y = r->y*scale; 
      pt2.y = (r->y+r->height)*scale; 

      // Draw the rectangle in the input image 
      cvRectangle(img, pt1, pt2, CV_RGB(255,0,0), 3, 8, 0); 
     } 
    } 

    // Show the image in the window named "result" 
    cvShowImage("result", img); 

    // Release the temp image created. 
    cvReleaseImage(&temp); 
} 

И путь /usr/share/src....is правильный путь, по которому xml-файл. Я связал библиотеки opencv: opencv_core, opencv_imgproc, opencv_highgui и opencv_video, чтобы затмить (и я думаю, что они правильно связаны, так как я таким образом создаю другие opencv-проекты). Но Eclipse, продолжает бросать следующие ошибки:

Invoking: MacOS X C++ Linker 
g++ -L/usr/local/include/opencv -L/usr/local/include/opencv2 -L/usr/local/lib -o "OpenCVFace" ./main.o -lopencv_core -lopencv_highgui -lopencv_video -lopencv_imgproc 
Undefined symbols for architecture x86_64: 
    "_cvHaarDetectObjects", referenced from: 
     detect_and_draw(_IplImage*)  in main.o 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 
make: *** [OpenCVFace] Error 1 

**** Build Finished **** 

Я могу видеть функция cvHaarDetectObjects выделена в Затмении (который превратился в фиолетовый цвет). Любые идеи о том, как решить проблему? Благодаря!

ответ

4

Вам необходимо связаться с opencv_objdetect; включают -lopencv_objdetect в флагах ссылок.

+0

Исправлена ​​ошибка. Благодаря! – Iam619

 Смежные вопросы

  • Нет связанных вопросов^_^