前提・実現したいこと
openCVとProcessingで肌色検出のプログラムを書きました。
肌色を検出できたところは輪郭線が描かれるようになっています。
この後やりたいこととしては、画面の中心にrectで一辺100くらいの正方形を描き、輪郭線が正方形に当たった時に、正方形の色が変わる(当たる前は赤→当たると緑になる)プログラムを書くことです。
しかしif文でcontoursが正方形に当たった時とそうでない場合で分けるなどして色々試しましたが、結局わかりませんでした…。
どのようにするのが最適な方法でしょうか…?
該当のソースコード
Processing
1import controlP5.*; 2import gab.opencv.*; 3import processing.video.*; 4 5Capture video; 6OpenCV opencv; 7//輪郭の配列 8//Contourはデータ型、contoursはオブジェクト名 9ArrayList<Contour> contours; 10 11PImage dst; 12int w = 640; 13int h = 480; 14ControlP5 slider, slider2; 15int Hue_Min = 120; 16int Hue_Max = 150; 17 18 19void setup() { 20 21 size(640, 480); 22 rectMode(CENTER); 23 video = new Capture(this, w, h); 24 opencv = new OpenCV(this, w, h); 25 26 //controlP5でGUI作成 27 slider = new ControlP5(this); 28 //終わりにセミコロンをつける 29 slider.addSlider("Hue_Min") 30 .setRange(0, 180) 31 //初期値 32 .setValue(Hue_Min) 33 .setPosition(50, 40) 34 .setSize(200, 10); 35 36 slider2 = new ControlP5(this); 37 slider2.addSlider("Hue_Max") 38 .setRange(0, 180) 39 .setValue(Hue_Max) 40 .setPosition(50, 80) 41 .setSize(200, 10); 42 43 video.start(); 44} 45 46void draw() { 47 //scale(2); 48 opencv.loadImage(video); 49 50 51 noFill(); 52 strokeWeight(3); 53 54 //画像データをHSV色空間で扱う 55 opencv.useColor(HSB); 56 57 //カメラの画像を読み込み 58 opencv.loadImage(video); 59 //カメラの画像を表示 60 image(video, 0, 0); 61 //グレースケール 62 opencv.gray(); 63 64 //範囲指定で2値価 65 opencv.inRange(Hue_Min, Hue_Max); 66 //閾値の設定 67 opencv.threshold(70); 68 dst = opencv.getOutput(); 69 //輪郭を抽出 70 contours = opencv.findContours(); 71 72 //検出された輪郭の数だけ、輪郭線を赤色で書く 73 //Contourはデータ型、contoursはオブジェクト名 74 for (Contour contour : contours) { 75 stroke(0, 255, 0); 76 contour.draw(); 77 78 stroke(255, 0, 0); 79 strokeWeight(1); 80 beginShape(); 81 for (PVector point : contour.getPolygonApproximation().getPoints()) { 82 vertex(point.x, point.y); 83 } 84 endShape(); 85 } 86} 87 88//キャプチャー 89void captureEvent(Capture c) { 90 c.read(); 91} 92 93void keyPressed() { 94 if (keyCode == ENTER) { 95 saveFrame("screen-####.jpg"); 96 } 97}
補足情報(FW/ツールのバージョンなど)
Processing3
OpenCV for Processing 0.5.4
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。