Ubuntu12.04+OpenCV+NetBeans

Ubuntu 12.04 DesktopにOpenCVNetBeansを入れて,サンプルプログラムを作り,コンパイルし,実行するまでの流れ.

Ubuntuインストール直後にやっておいたこと

$ sudo apt-get install build-essential

OpenCVのインストール

$ sudo apt-get install libcv-dev libcv2.3 libcvaux-dev libcvaux2.3 libhighgui-dev libhighgui2.3 opencv-doc

NetBeansのインストール

まずは,Java

$ sudo apt-get install openjdk-6-jdk

その後,https://netbeans.org/downloads/ から,C/C++がバンドルされたものをダウンロード.
ここでは,netbeans-7.4-cpp-linux.sh をダウンロードする.
実行権限を付与して,インストールする.インストールはsudoでないことに留意.

$ chmod +x netbeans-7.4-cpp-linux.sh
$ ./netbeans-7.4-cpp-linux.sh

NetBeansの起動とC++プロジェクトの作成

新規プロジェクトから,「C/C++アプリケーション」を選んでプロジェクトを作成する

OpenCV関係の設定

プロジェクトのプロパティから以下の設定を追加する

  1. ビルド
    1. C++コンパイラ
      1. インクルード・ディレクトリ:/usr/local/include/opencv2
    2. リンカー
      1. ランタイム検索ディレクトリ:/usr/local/include/opencv2
      2. ライブラリ -> オプションの追加 -> その他のオプション:`pkg-config --libs --cflags opencv`*1

参考:http://thefreecoder.wordpress.com/2012/09/10/use-netbeans-to-work-with-opencv-on-ubuntuand-linux-mint-and-other-distros-too/

サンプルコードをmain.cppに書いて実行

http://ser1zw.hatenablog.com/entry/20101030/1288441129 をベースに,http://ninetynine.be/blog/2011/11/setting-up-opencv-2-3-and-netbeans-7-0-on-ubuntu-oneiric-11-10/ を参考にしてinclude部分を少し書き換えました.

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc_c.h>
#include <iostream>
#include <stdio.h>
using namespace cv;
using namespace std;

int main (int argc, char *argv[]) {
  IplImage *src, *result;
  char *original = "Original";
  char *canny = "Canny";

  if (argc < 2) {
    printf("Usage: opencvtest imagename\n");
    return -1;
  }
  if((src = cvLoadImage(argv[1], CV_LOAD_IMAGE_GRAYSCALE)) == 0) {
    printf("Error: Failed to load %s\n", argv[1]);
    return -1;
  }

  result = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
  cvCanny(src, result, 50.0, 200.0, 3);

  cvNamedWindow(original, CV_WINDOW_AUTOSIZE);
  cvNamedWindow(canny, CV_WINDOW_AUTOSIZE);
  cvShowImage(original, src);
  cvShowImage(canny, result);
  cvWaitKey(0);
   
  cvDestroyWindow(original);
  cvDestroyWindow(canny);
  cvReleaseImage(&src);
  cvReleaseImage(&result);
  
  return 0;
}

(using namespaceとか分かっていないので,たぶん間違っているか,無駄な記述……iostreamも今回は動画ではなく画像なのでいらないと思われる)

実行

$ cd dist/Release/GNU-Linux-x86
$ ./cppapplication_1 ~/sample.jpg

~/sample.jpgは適当な画像.オリジナルのグレースケール画像と,輪郭出力画像が表示されればOK*2

*1:バッククオートも入力する

*2:ウィンドウがピッタリ重なっているので,ウィンドウを動かして確認