memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

Processing3.0でCould not find sketch sizeというエラーへの対処

久しぶりにprocessingを使うと3.0になっていて、IDEにデバッガーが付いたりいろいろ嬉しいことですが、サンプルを動かすと以下のようなエラーが出ることがあります。

f:id:ke_takahashi:20151215221924p:plain

sizeの引数は読み込んだ画像やWebカメラサイズに合わせて設定することがあると思いますが、変数で動的に決定するのはダメよと言われているわけです。

ぐぐってみると確かにそういう対処をした人も。

http://wshinya.hatenablog.com/entry/2015/10/05/142750

でも、いちいち数字に直すのは面倒だし、プログラムによっては大幅な書き換えが必要な場合があります。

そんなときにはsettingsメソッドを使うといいようです。setupメソッドを呼ぶ前にsettingsを実行するようで、ここであれば変数でsizeを設定しても怒られません。

以下、OpenCVのサンプル(DepthFromStereo)を書き換えた例です。

  • Before
OpenCV ocvL, ocvR;
PImage  imgL, imgR, depth1, depth2;

void setup() {
  imgL = loadImage("scene_l.jpg");
  imgR = loadImage("scene_r.jpg");
  ocvL = new OpenCV(this, imgL);
  ocvR = new OpenCV(this, imgR);
  size(ocvL.width * 2, ocvL.height*2);
  ocvL.gray();
  ocvR.gray();
  Mat left = ocvL.getGray();
  Mat right = ocvR.getGray();
  • After
OpenCV ocvL, ocvR;
PImage  imgL, imgR, depth1, depth2;

void settings() {
  imgL = loadImage("scene_l.jpg");
  imgR = loadImage("scene_r.jpg");
  ocvL = new OpenCV(this, imgL);
  ocvR = new OpenCV(this, imgR);
  size(ocvL.width * 2, ocvL.height*2);
}

void setup() {
  ocvL.gray();
  ocvR.gray();
  Mat left = ocvL.getGray();
  Mat right = ocvR.getGray();

漢字も出たり出なかったり。。。サンプルも動かなかったり。結構、卒業研究とかでやられている人いるんじゃないでしょうかね ^^;;;

まぁ、進歩のためには仕方がありません。直して貢献しましょう。