全自動水玉コラ生成マシーン




demo
https://github.com/onk/auto_circle_collage

processing  OpenCV 



(一)

(二)

(三)沿



OpenCV 使

 -> 




RGB  HSV 使

HSV色空間 HSV - Wikipedia

HSV 

 Hue: 7..15 
PImage detectHada() {
  // 作業用に hue で grayscale にする
  opencv.loadImage(img);
  opencv.useColor(HSB);
  opencv.setGray(opencv.getH().clone());
  // 肌色は 7..15 と定義。inRange で取り出す
  opencv.inRange(7, 15);

  // ノイズ除去 MORPH_OPEN
  opencv.erode();
  opencv.dilate();

  return opencv.getSnapshot();
}

影の部分も抽出できている様子




 -> 

膨張・収縮で水着領域を選択
// 輪郭を広げて戻す
for (int i = 0; i < 10; i++) { opencv.dilate(); }
for (int i = 0; i < 10; i++) { opencv.erode(); }



10

opencv-processing 調







Saturation: 180..255 ()

Brightness: 8..247 ()




彩度で水着判定
void detectMizugi() {
  // 水着を彩度 180..255, 明度 8..247 と定義。inRange で取り出す
  opencv.loadImage(img);
  opencv.useColor(HSB);
  opencv.setGray(opencv.getS().clone());
  opencv.inRange(180, 255);
  PImage s = opencv.getSnapshot();

  opencv.loadImage(img);
  opencv.useColor(HSB);
  opencv.setGray(opencv.getB().clone());
  opencv.inRange(8, 247);
  PImage b = opencv.getSnapshot();

  // TODO: 無駄に PImage に一度変換して blend しているが
  // おそらく OpenCV のみで可能
  s.blend(b, 0, 0, width, height, 0, 0, width, height, MULTIPLY);

  opencv.loadImage(s);
  opencv.erode();
  opencv.dilate();

  ArrayList<Contour> contours = opencv.findContours();
  for (Contour contour : contours) {
    // 面積が小さすぎるものはノイズと判断して弾く
    if (contour.area() >25) {
      mizugiAreaList.add(contour);
    }
  }
}


OpenCV 2
opencv.loadCascade(OpenCV.CASCADE_FRONTALFACE);
Rectangle[] faces = opencv.detect();

顔認識
 30% OpenCV 使 





 : (^o^) - 

 











15













調














 (OBB )  便

凸包 ()


 ()


OpenCV  inpaint 



曇りガラス表現


OpenCV 便

Chrome  web 


偉大なる先人たち