You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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);
}