ProcessingでOpenCVを使う

今年はマンションの理事の当番なのですが、想像以上に忙しいです。3週連続週末にイベントがあって大変。

本日は遠大な目標の実現に向けて、ProcessingOpenCVを使うための準備をしたいと思います。(知ってる人にはごく当たり前の内容です)

ProcessingでOpenCVを使う方法

OpenCVインテルが開発した、画像の処理や解析を行うオープンソースのライブラリです。openFrameworksをはじめとする各種クリエイティブコーディング環境で利用されています。Processingでも専用に用意されたライブラリを用いることで、OpenCVの機能を使うことが可能です。

ProcessingでOpenCVを利用する手順は以下の通りです。

OpenCV for Processingの入手

まず、Processing専用のOpenCVライブラリであるOpenCV for ProcessingGitHubから入手します。専用ページのreleasesから最新のものをダウンロードします。

OpenCV for Processingのインストール

次にOpenCV for ProcessingをProcessingにインストールします。インストールはダウンロードしたファイルを展開して、Sketchbookフォルダの直下のlibrariesフォルダに置くことで行います。

Sketchbookフォルダの場所は、ProcessingのPreferencesメニューのSkeckbook locationから確認することができます。

f:id:tkitao:20140524140505p:plain

Processingをすでに起動していた場合は、一度起動し直さないとライブラリが認識されないので注意してください。

サンプルを動かす

最後に、OpenCV for Processingに同梱されているサンプルを動かしてみます。OpenCV for ProcessingのexamplesフォルダにあるBackgroundSubtraction.pdeを起動してみます。

f:id:tkitao:20140524141400p:plain

無事、動作が確認できました。

このサンプルのコードは以下のとおり37行しかありません。このあたりのお手軽さがProcessingの最大の魅力ですね。

import gab.opencv.*;
import processing.video.*;

Movie video;
OpenCV opencv;

void setup() {
  size(720, 480, P2D);
  video = new Movie(this, "street.mov");
  opencv = new OpenCV(this, 720, 480);

  opencv.startBackgroundSubtraction(5, 3, 0.5);

  video.loop();
  video.play();
}

void draw() {
  image(video, 0, 0);
  opencv.loadImage(video);

  opencv.updateBackground();

  opencv.dilate();
  opencv.erode();

  noFill();
  stroke(255, 0, 0);
  strokeWeight(3);
  for (Contour contour : opencv.findContours()) {
    contour.draw();
  }
}

void movieEvent(Movie m) {
  m.read();
}