Компиляция базовой программы OpenCV на Mac OS X 10.7

Я установил opencv из Macports, и он находится в /Опт/локальные/включить

Я попытался скомпилировать базовый код OPENCV из терминала, предоставив следующие команды, но он не скомпилируется:

g++ example.cpp -o example -I /usr/local/include/opencv/ -L /usr/local/lib/ -lopencv_highgui -lopencv_calib3d -lopencv_legacy
g++ example.cpp -o example -I /opt/local/include/opencv/ -L /opt/local/lib/ -lopencv_highgui -lopencv_calib3d -lopencv_legacy

Может ли кто-нибудь сказать мне правильную команду терминала для компиляции приведенной ниже программы opencv для Mac OS X 10,7?

Я пытался скомпилировать простой пример, приведенный по этой ссылке: http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/

Изменить:

Вот код, который я пытаюсь скомпилировать:

////////////////////////////////////////////////////////////////////////
//
// hello-world.cpp
//
// This is a simple, introductory OpenCV program. The program reads an
// image from a file, inverts it, and displays the result. 
//
////////////////////////////////////////////////////////////////////////
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cv.h>
#include <highgui.h>


int main(int argc, char *argv[])
{
  IplImage* img = 0; 
  int height,width,step,channels;
  uchar *data;
  int i,j,k;

  if(argc<2){
    printf("Usage: main <image-file-name>\n\7");
    exit(0);
  }

  // load an image  
  img=cvLoadImage(argv[1]);
  if(!img){
    printf("Could not load image file: %s\n",argv[1]);
    exit(0);
  }

  // get the image data
  height    = img->height;
  width     = img->width;
  step      = img->widthStep;
  channels  = img->nChannels;
  data      = (uchar *)img->imageData;
  printf("Processing a %dx%d image with %d channels\n",height,width,channels); 

  // create a window
  cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE); 
  cvMoveWindow("mainWin", 100, 100);

  // invert the image
  for(i=0;i<height;i++) for(j=0;j<width;j++) for(k=0;k<channels;k++)
    data[i*step+j*channels+k]=255-data[i*step+j*channels+k];

  // show the image
  cvShowImage("mainWin", img );

  // wait for a key
  cvWaitKey(0);

  // release the image
  cvReleaseImage(&img );
  return 0;
}

И вот вывод:

[email protected]~/Programming/opencvTest $ g++ example.c -o example 'pkg-config --cflags --libs opencv'
i686-apple-darwin11-llvm-g++-4.2: pkg-config --cflags --libs opencv: No such file or directory
example.c:14:16: error: cv.h: No such file or directory
example.c:15:21: error: highgui.h: No such file or directory
example.c: In function ‘int main(int, char**)’:
example.c:21: error: ‘IplImage’ was not declared in this scope
example.c:21: error: ‘img’ was not declared in this scope
example.c:23: error: ‘uchar’ was not declared in this scope
example.c:23: error: ‘data’ was not declared in this scope
example.c:32: error: ‘cvLoadImage’ was not declared in this scope
example.c:43: error: expected primary-expression before ‘)’ token
example.c:43: error: expected `;' before ‘img’
example.c:47: error: ‘CV_WINDOW_AUTOSIZE’ was not declared in this scope
example.c:47: error: ‘cvNamedWindow’ was not declared in this scope
example.c:48: error: ‘cvMoveWindow’ was not declared in this scope
example.c:55: error: ‘cvShowImage’ was not declared in this scope
example.c:58: error: ‘cvWaitKey’ was not declared in this scope
example.c:61: error: ‘cvReleaseImage’ was not declared in this scope

Edit [6Dec]:

[email protected]~/Programming/opencvTest $ g++ example.cpp -o example `pkg-config --cflags --libs opencv`
Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found
i686-apple-darwin11-llvm-g++-4.2: example.cpp: No such file or directory
i686-apple-darwin11-llvm-g++-4.2: no input files
[email protected]~/Programming/opencvTest $ 

в моем /opt/local/lib У меня:

[email protected]/opt/local/lib $ ls *cv*
libopencv_calib3d.2.3.1.dylib       libopencv_highgui.dylib
libopencv_calib3d.2.3.dylib     libopencv_imgproc.2.3.1.dylib
libopencv_calib3d.dylib         libopencv_imgproc.2.3.dylib
libopencv_contrib.2.3.1.dylib       libopencv_imgproc.dylib
libopencv_contrib.2.3.dylib     libopencv_legacy.2.3.1.dylib
libopencv_contrib.dylib         libopencv_legacy.2.3.dylib
libopencv_core.2.3.1.dylib      libopencv_legacy.dylib
libopencv_core.2.3.dylib        libopencv_ml.2.3.1.dylib
libopencv_core.dylib            libopencv_ml.2.3.dylib
libopencv_features2d.2.3.1.dylib    libopencv_ml.dylib
libopencv_features2d.2.3.dylib      libopencv_objdetect.2.3.1.dylib
libopencv_features2d.dylib      libopencv_objdetect.2.3.dylib
libopencv_flann.2.3.1.dylib     libopencv_objdetect.dylib
libopencv_flann.2.3.dylib       libopencv_ts.2.3.1.dylib
libopencv_flann.dylib           libopencv_ts.2.3.dylib
libopencv_gpu.2.3.1.dylib       libopencv_ts.dylib
libopencv_gpu.2.3.dylib         libopencv_video.2.3.1.dylib
libopencv_gpu.dylib         libopencv_video.2.3.dylib
libopencv_highgui.2.3.1.dylib       libopencv_video.dylib
libopencv_highgui.2.3.dylib
[email protected]/opt/local/lib $ 

Теперь я использовал эту команду:

   [email protected]~/Programming/opencvTest $ g++ hello-world.cpp -o hello-world -I /opt/local/include/opencv/ -L /opt/local/lib  -lopencv_highgui -lopencv_core
In file included from hello-world.cpp:12:
/opt/local/include/opencv/cv.h:63:33: error: opencv2/core/core_c.h: No such file or directory
/opt/local/include/opencv/cv.h:64:33: error: opencv2/core/core.hpp: No such file or directory
/opt/local/include/opencv/cv.h:65:39: error: opencv2/imgproc/imgproc_c.h: No such file or directory
/opt/local/include/opencv/cv.h:66:39: error: opencv2/imgproc/imgproc.hpp: No such file or directory
/opt/local/include/opencv/cv.h:67:38: error: opencv2/video/tracking.hpp: No such file or directory
/opt/local/include/opencv/cv.h:68:45: error: opencv2/features2d/features2d.hpp: No such file or directory
/opt/local/include/opencv/cv.h:69:35: error: opencv2/flann/flann.hpp: No such file or directory
/opt/local/include/opencv/cv.h:70:39: error: opencv2/calib3d/calib3d.hpp: No such file or directory
/opt/local/include/opencv/cv.h:71:43: error: opencv2/objdetect/objdetect.hpp: No such file or directory
/opt/local/include/opencv/cv.h:72:37: error: opencv2/legacy/compat.hpp: No such file or directory
/opt/local/include/opencv/cv.h:79:37: error: opencv2/core/internal.hpp: No such file or directory
In file included from hello-world.cpp:13:
/opt/local/include/opencv/highgui.h:47:39: error: opencv2/highgui/highgui_c.h: No such file or directory
/opt/local/include/opencv/highgui.h:48:39: error: opencv2/highgui/highgui.hpp: No such file or directory
hello-world.cpp: In function ‘int main(int, char**)’:
hello-world.cpp:18: error: ‘IplImage’ was not declared in this scope
hello-world.cpp:18: error: ‘img’ was not declared in this scope
hello-world.cpp:20: error: ‘uchar’ was not declared in this scope
hello-world.cpp:20: error: ‘data’ was not declared in this scope
hello-world.cpp:29: error: ‘cvLoadImage’ was not declared in this scope
hello-world.cpp:40: error: expected primary-expression before ‘)’ token
hello-world.cpp:40: error: expected `;' before ‘img’
hello-world.cpp:44: error: ‘CV_WINDOW_AUTOSIZE’ was not declared in this scope
hello-world.cpp:44: error: ‘cvNamedWindow’ was not declared in this scope
hello-world.cpp:45: error: ‘cvMoveWindow’ was not declared in this scope
hello-world.cpp:52: error: ‘cvShowImage’ was not declared in this scope
hello-world.cpp:55: error: ‘cvWaitKey’ was not declared in this scope
hello-world.cpp:58: error: ‘cvReleaseImage’ was not declared in this scope
[email protected]~/Programming/opencvTest $ 

Ответ 1

Или используйте pkg-config, чтобы помочь вам заполнить пути и библиотеки:

g++ example.cpp -o example `pkg-config --cflags --libs opencv`

Ответ 2

Ура!!! Эта команда работала:

g++ hello-world.cpp -o hello-world `pkg-config --cflags --libs opencv` 

Мне просто нужно добавить путь к файлу opencv.pc в .profile (or .bash_profile), который:

export PKG_CONFIG_PATH=/opt/local/lib/pkgconfig

Теперь я пытаюсь скомпилировать файл, который использует

#include <opencv2/opencv.hpp> 

вместо

#include <cv.h>
#include <highgui.h>

Я скоро ответу, если эта же команда работает для этого или нет. Большое спасибо ребятам за все комментарии.

Ответ 3

Ты близко. cvReleaseImage находится в opencv_core. Я узнал об этом, выполнив поиск cvReleaseImage в http://opencv.itseez.com. Это сработало для меня:

g++ hello-world.cpp -o hello-world -I /usr/local/include/opencv -L /usr/local/lib  -lopencv_highgui -lopencv_core

Он должен работать для вас, если вы измените /usr на /opt.

Edit:

Попробуйте внести это изменение в исходный код:

#include "opencv.hpp"
//#include <cv.h>
//#include <highgui.h>

Я думаю, что проблема связана с неправильной совпадением версии кода учебника и установленного вами OpenCV 2.3. Они изменили организацию каталогов и имена библиотек.