ライブカメラの映像を加工した作品をつくってみる。
ライブカメラの映像を表示する
そのまま表示する
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分割で表示する
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();
}
色情報を取得して再描画する
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室では、インストールの権限制限があり、みなさん自身ではインストールができません。利用したい場合は事前に相談ください。
そのまま表示する
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ライブラリを使用するときよりも、コードがシンプルになる
加工して表示する
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でできること
- Newer: Processing for Android を試してみた
- Older: Box2D を Processing で使う





![Built with Processing [改訂版]](http://ecx.images-amazon.com/images/I/41XEE%2BuMOzL._SL160_.jpg)




