Home > 1b > | ノート > 1b-10 ライブカメラを使う

1b-10 ライブカメラを使う

  • Posted by: masa
  • 2009年12月14日 14:40
  • 1b | ノート

ライブカメラの映像を加工した作品をつくってみる。

ライブカメラの映像を表示する

そのまま表示する

sketch_1b_10_1

import processing.video.*; // Videoを扱うライブラリをインポート
Capture camera; // ライブカメラの映像をあつかうCaptureの変数

void setup() {
  size(480, 320);
  camera = new Capture(this, width, height, 12); // Captureオブジェクトを生成
}

void draw() {
  image(camera, 0, 0); // 画面に表示
} 

//カメラの映像が更新されるたびに、最新の映像を読み込む
void captureEvent(Capture camera) {
  camera.read();
}

同じ映像を4分割で表示する

sketch_1b_10_2

import processing.video.*;
Capture camera;

void setup() {
  size(480, 320);
  camera = new Capture(this, width, height, 12);
}

void draw() {
  image(camera, 0, 0, width/2, height/2); // 画面に表示 左上に1/2サイズで
  image(camera, width/2, 0, width/2, height/2); // 画面に表示 右上に1/2サイズで
  image(camera, 0, height/2, width/2, height/2); // 画面に表示 左下に1/2サイズで
  image(camera, width/2, height/2, width/2, height/2); // 画面に表示 右下に1/2サイズで
} 

void captureEvent(Capture camera) {
  camera.read();
}

色情報を取得して再描画する

sketch_1b_10_3

import processing.video.*;
Capture camera;

void setup() {
  size(480, 320);
  colorMode(HSB, 100);
  smooth();
  noStroke();
  camera = new Capture(this, width, height, 12);
}

void draw() {
  background(0);
  camera.loadPixels(); //カメラ画像のpixel情報を読み込み
  int d = 10; //円の直径を定義
  // ライブカメラの映像から、円の直径の間隔ごとに、色情報を取得し、その色で円を描く
  for(int y = d / 2 ; y < height ; y += d) {
    for(int x = d / 2 ; x < width ; x += d) {
      int pos = (y * width) + x; // pixelの位置
      color c = camera.pixels[pos]; // pixelの色情報
      fill(c);
      ellipse(x, y, d, d);
    }
  }
} 

void captureEvent(Capture camera) {
  camera.read();
}

pixels 配列とは

  • 画面全体またはPImageオブジェクトを1次元の配列として表したもの
  • color型の配列
  • (x,y)の情報は pixels[(y*width)+x)] で得られる

練習

  • 円の大きさをランダムにしてみる
  • 色情報を加工してみる

参考:OpenCV(画像処理ライブラリ)を使う

準備:OpenCVのインストール

  • OPENCV \ library
    • OpenCVのインストール
    • OpenCVの Processing ライブラリを、書類 > Processing > libraries 内に配置

※Mac室では、インストールの権限制限があり、みなさん自身ではインストールができません。利用したい場合は事前に相談ください。

そのまま表示する

sketch_1b_10_5

import hypermedia.video.*; //OpenCVライブラリをインポート
OpenCV opencv; //OpenCV型の変数

void setup() {
  size(480, 320);
  opencv = new OpenCV(this);
  opencv.capture(width, height); ////映像読み込みの初期化
}

void draw() {
  opencv.read(); //映像を読み込む
  image(opencv.image(), 0, 0); //映像を表示
}
  • videoライブラリを使用するときよりも、コードがシンプルになる

加工して表示する

sketch_1b_10_6

import hypermedia.video.*;
OpenCV opencv;

void setup() {
  size(480, 320);
  opencv = new OpenCV(this);
  opencv.capture(width, height);
}

void draw() {
  opencv.read();
  //左上
  opencv.convert(OpenCV.GRAY); //グレースケールに変換  
  image(opencv.image(), 0, 0, width/2, height/2); //画面に表示 左上に1/2サイズで
  //右上
  opencv.invert(); //色を反転
  image(opencv.image(), width/2, 0, width/2, height/2); // 画面に表示 右上に1/2サイズで
  //左下
  opencv.restore(); //オリジナルの映像に戻す
  opencv.flip(OpenCV.FLIP_HORIZONTAL); //映像を水平方向に反転する
  image(opencv.image(), 0, height/2, width/2, height/2); // 画面に表示 左下に1/2サイズで
  //右下
  image(opencv.image(OpenCV.SOURCE), width/2, height/2, width/2, height/2); // 画面に表示 オリジナルの映像を右下に1/2サイズで
}

そのほかOpenCVでできること

Home > 1b > | ノート > 1b-10 ライブカメラを使う

Search
Feeds
Textbook
  • Built with Processing [改訂版]
Recommends
  • Processing – A Programming Handbook for Visual Designers and Artists
  • Learning Processing: A Beginner's Guide to Programming Images, Animation, and Interaction (Morgan Kaufmann Series in Computer Graphics)
  • Arduinoをはじめよう
  • ビジュアライジング・データ ―Processingによる情報視覚化手法
  • +GAINER―PHYSICAL COMPUTING WITH GAINER

Return to page top