2012-10-07 14 views
12

He instalado OpenCV con macports siguiendo las instrucciones aquí: Compile OpenCV (2.3.1+) for OS X Lion/Mountain Lion with Xcodebibliotecas Vinculación OPENCV 2.4.2 en Xcode 4.5.1

También he intentado buscar y todos los demás variación de esto en StackExchange y Google, pero esto parece consigueme más cerca.

Parece que funciona para algunas cosas, pero no para el código de muestra que se envía con 2.4.2. Tenga en cuenta que he agregado ALL opencv 2.4.2 dylibs Link Binary con Bibliotecas.

Por ejemplo, lo siguiente será compilar y ejecutar:

#include <opencv2/opencv.hpp> 
#include <opencv2/highgui/highgui.hpp> 

int main (int argc, char **argv) 
{ 
    cvNamedWindow("My Window", 1); 
    IplImage *img = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 1); 
    CvFont font; 
    double hScale = 1.0; 
    double vScale = 1.0; 
    int lineWidth = 1; 
    cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX | CV_FONT_ITALIC, 
      hScale, vScale, 0, lineWidth); 
    cvPutText(img, "Hello World!", cvPoint(200, 400), &font, 
      cvScalar(255, 255, 0)); 
    cvShowImage("My Window", img); 
    cvWaitKey(); 
    return 0; 
} 

Sin embargo, cuando intento de construir ninguna de las muestras, como la display_image.cpp, ejemplo, de la siguiente manera, consigo errores de enlace.

-¿La NO TRABAJO DE

#include <stdio.h> 
#include <iostream> 
#include "opencv2/imgproc/imgproc.hpp" 
#include "opencv2/highgui/highgui.hpp" 
#include "opencv2/flann/miniflann.hpp" 

using namespace cv; // all the new API is put into "cv" namespace. Export its content 
using namespace std; 
using namespace cv::flann; 

static void help() 
{ 
    cout << 
    "\nThis program shows how to use cv::Mat and IplImages converting back and forth.\n" 
    "It shows reading of images, converting to planes and merging back, color conversion\n" 
    "and also iterating through pixels.\n" 
    "Call:\n" 
    "./image [image-name Default: lena.jpg]\n" << endl; 
} 

int main(int argc, char *argv[]) 
{ 
    help(); 
    const char* imagename = argc > 1 ? argv[1] : "lena.jpg"; 
    Mat img = imread(imagename); // the newer cvLoadImage alternative, MATLAB-style function 
    if(img.empty()) 
    { 
     fprintf(stderr, "Can not load image %s\n", imagename); 
     return -1; 
    } 
    if(!img.data) // check if the image has been loaded properly 
     return -1; 

    Mat img_yuv; 
    cvtColor(img, img_yuv, CV_BGR2YCrCb); // convert image to YUV color space. The output image will be created automatically 

    vector<Mat> planes; // Vector is template vector class, similar to STL's vector. It can store matrices too. 
    split(img_yuv, planes); // split the image into separate color planes 

    imshow("image with grain", img); 

    waitKey(); 

    return 0; 

} 

consigo los siguientes errores:

Undefined symbols for architecture x86_64: 
"cv::split(cv::Mat const&, std::__1::vector<cv::Mat, std::__1::allocator<cv::Mat> >&)", referenced from: 
    _main in main1.o 
"cv::imread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", referenced from: 
    _main in main1.o 
"cv::imshow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cv::_InputArray const&)", referenced from: 
    _main in main1.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

alguna idea de cómo resolver esto?

+0

Anthony y Marco le dieron la respuesta correcta a continuación. Es una de esas cosas que, una vez que la experimentas, la conoces para siempre. Debe aceptar una respuesta para ayudar a los futuros visitantes. – jww

Respuesta

0

Intente agregar manualmente el directorio donde port pone todos los dylibs (/opt/local/lib si no me estoy equivocando) en Configuración de compilación-> Ruta de búsqueda de la biblioteca. Esto debería solucionar el problema de vinculación.

+0

Gracias, pero ya lo había hecho. Sin él, aparece un error diferente: ld: biblioteca no encontrada para -lopencv_calib3d.2.4.2 clang: error: comando del enlazador falló con el código de salida 1 (use -v para ver la invocación) – glerg

41

Tuve el mismo problema. Una configuración predeterminada de compilación parece ser diferente en Xcode 4.5.

En "Construir Configuración" -> Apple LLVM compilador 4,1 - Idioma>

C++ biblioteca estándar: = Cambio de libC++ (LLVM ...) a libstdC++ (GNU C++. ..).

+0

Cool, gracias! Esto funciona para mi. – tangqiaoboy

+0

Esta debería ser la respuesta aceptada :) –

+0

Podría desarrollar más sobre la respuesta que no entendí por qué tenemos que cambiar de LLVM a GNU C++. @glerg acepta la respuesta. – BRabbit27

3

Es muy probable que OpenCV no se haya compilado con la configuración de C++ 11, mientras que el programa sí lo está. Establezca la compilación de su herramienta sin los conmutadores C++ 11 (es decir, -std = C++ 11 -stdlib = libC++).

Cuestiones relacionadas