OpenCV インストール

なにやら OpenCV を使うと OpenGL の動画をファイルとして出力できるらしい!
こんな楽しいものをインストールしない手は無い!!

MacPorts にパッケージがあるみたいだったので、早速インストール。

$ sudo port install opencv

(Mac が生まれ変わったのを機に、fink から MacPorts へ宗旨替えしてみました。
fink より比較的新しいバージョンを扱ってくれてるみたいです。)

う〜ん、でもヘッダファイルの cv.h と highgui.h が locate で見付からない……。

$ locate cv.h

いやいや、最近のファイルだから locatedb が更新されてないだけでしょ、ってことで

$ /usr/libexec/locate.updatedb

っと。無事、/opt/local/include/opencv/ に cv.h と highgui.h が見付かりました。


早速以下の簡単なサンプルプログラムをコンパイル
(コピー元: http://opencv.jp/sample/basic_structures.html)

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

int
main (int argc, char **argv)
{
  int x, y;
  uchar p[3];
  IplImage *img;

  if (argc != 2 || (img = cvLoadImage (argv[1], CV_LOAD_IMAGE_COLOR)) == 0)
    return -1;

  // (1)ピクセルデータ(R,G,B)を順次取得し,変更する
  for (y = 0; y < img->height; y++) {
    for (x = 0; x < img->width; x++) {
      p[0] = img->imageData[img->widthStep * y + x * 3];        // B
      p[1] = img->imageData[img->widthStep * y + x * 3 + 1];    // G
      p[2] = img->imageData[img->widthStep * y + x * 3 + 2];    // R
      img->imageData[img->widthStep * y + x * 3] = cvRound (p[0] * 0.7 + 10);
      img->imageData[img->widthStep * y + x * 3 + 1] = cvRound (p[1] * 1.0);
      img->imageData[img->widthStep * y + x * 3 + 2] = cvRound (p[2] * 0.0);
    }
  }

  cvNamedWindow ("Image", CV_WINDOW_AUTOSIZE);
  cvShowImage ("Image", img);
  cvWaitKey (0);

  cvDestroyWindow ("Image");
  cvReleaseImage (&img);

  return 0;
}
gcc test.c -o test -I/opt/local/include/opencv -L/opt/local/lib/ -lcv -lhighgui

(gcc オプションはここを参考に。)

しかし、ローダが以下のようなエラーを吐く。

/usr/libexec/gcc/i686-apple-darwin8/4.0.1/ld: Undefined symbols:
_cvAddS
_cvAlloc
_cvAvg
_cvAvgSdv
_cvBoundingRect
_cvBoxPoints
_cvCalcArrHist
_cvCalcEMD2
_cvCalibrateCamera2
_cvCartToPolar
_cvCircle
_cvColorToScalar
_cvConvexHull2
_cvCreateGraphScanner
_cvCreateMat
_cvCreateSubdiv2D
_cvDestroyWindow
_cvEllipse
_cvError
_cvExp
_cvFindChessboardCorners
_cvFindExtrinsicCameraParams2
_cvFindFundamentalMat
_cvFitEllipse2
_cvFitLine
_cvFree_
_cvGetCols
_cvGetElemType
_cvGetFileNodeByName
_cvGetRawData
_cvGetRows
_cvGetSeqElem
_cvHoughLines2
_cvInitFont
_cvInitSubdivDelaunay2D
_cvInvert
_cvKMeans2
_cvLine
_cvLoadImage
_cvLog
_cvMinAreaRect2
_cvNamedWindow
_cvPerspectiveTransform
_cvPolyLine
_cvPow
_cvProjectPoints2
_cvRandArr
_cvRead
_cvReleaseGraphScanner
_cvReleaseImage
_cvReleaseMat
_cvReshape
_cvRodrigues2
_cvSeqSlice
_cvSet
_cvSetAdd
_cvShowImage
_cvSum
_cvTransform
_cvUndistort2
_cvWaitKey
collect2: ld returned 1 exit status

調べてみると、/opt/local/lib/ 以下には libcv.a と libhighgui.a は無い。そりゃあエラー吐くわ。
今日のところはここまでで、また明日からコンパイルできるよう頑張ります。

# 結局、手動で OpenCV をインストールする羽目になったりして((((;゜Д゜)))