62 lines
1.6 KiB
Plaintext
62 lines
1.6 KiB
Plaintext
import gab.opencv.*;
|
|
|
|
import org.opencv.core.Core;
|
|
import org.opencv.core.Mat;
|
|
import org.opencv.core.Size;
|
|
import org.opencv.core.Point;
|
|
import org.opencv.core.Scalar;
|
|
import org.opencv.core.CvType;
|
|
import org.opencv.imgproc.Imgproc;
|
|
|
|
OpenCV opencv;
|
|
PImage src,dst, hist, histMask;
|
|
|
|
Mat skinHistogram;
|
|
|
|
void setup(){
|
|
src = loadImage("test.jpg");
|
|
src.resize(src.width/2, 0);
|
|
size(src.width*2 + 256, src.height);
|
|
// third argument is: useColor
|
|
opencv = new OpenCV(this, src, true);
|
|
|
|
skinHistogram = Mat.zeros(256, 256, CvType.CV_8UC1);
|
|
Core.ellipse(skinHistogram, new Point(113.0, 155.6), new Size(40.0, 25.2), 43.0, 0.0, 360.0, new Scalar(255, 255, 255), Core.FILLED);
|
|
|
|
histMask = createImage(256,256, ARGB);
|
|
opencv.toPImage(skinHistogram, histMask);
|
|
hist = loadImage("cb-cr.png");
|
|
hist.blend(histMask, 0,0,256,256,0,0,256,256, ADD);
|
|
|
|
dst = opencv.getOutput();
|
|
dst.loadPixels();
|
|
|
|
for(int i = 0; i < dst.pixels.length; i++){
|
|
|
|
Mat input = new Mat(new Size(1, 1), CvType.CV_8UC3);
|
|
input.setTo(colorToScalar(dst.pixels[i]));
|
|
Mat output = opencv.imitate(input);
|
|
Imgproc.cvtColor(input, output, Imgproc.COLOR_BGR2YCrCb );
|
|
double[] inputComponents = output.get(0,0);
|
|
if(skinHistogram.get((int)inputComponents[1], (int)inputComponents[2])[0] > 0){
|
|
dst.pixels[i] = color(255);
|
|
} else {
|
|
dst.pixels[i] = color(0);
|
|
}
|
|
}
|
|
|
|
dst.updatePixels();
|
|
}
|
|
|
|
// in BGR
|
|
Scalar colorToScalar(color c){
|
|
return new Scalar(blue(c), green(c), red(c));
|
|
}
|
|
|
|
|
|
void draw(){
|
|
image(src,0,0);
|
|
image(dst, src.width, 0);
|
|
image(hist, src.width*2, 0);
|
|
}
|