// // Detects faces in an image, draws boxes around them, and writes the results // to "faceDetection.png". // classDetectFaceDemo{ publicvoidrun(){ System.out.println("\nRunning DetectFaceDemo");
// Create a face detector from the cascade file in the resources // directory. CascadeClassifier faceDetector =new CascadeClassifier(“data/lbpcascades/lbpcascade_frontalface.xml”); Mat image = Highgui.imread(“resources/lena.png");
// Detect faces in the image. // MatOfRect is a special container class for Rect. MatOfRect faceDetections =new MatOfRect(); faceDetector.detectMultiScale(image, faceDetections);
// Load the native library. System.loadLibrary(Core.NATIVE_LIBRARY_NAME); newDetectFaceDemo().run(); } }
実行したら、次のファイルが生成されているはずです。
・おまけ
BufferedImage から Mat オブジェクトへの変換。 imgという名前でBufferedImageのオブジェクトが作成されている場合:
Pixels pixels = ((DataBufferByte)img.getRaster().getDataBuffer()).getData(); Mat mat = new Mat(img.getHeight(),img.getWidth(),CvType.CV_8UC3); mat.put(0, 0, pixels); これでmatに画像データがコピーされた行列ができます。 ちなみにimg.getRaster().getDataBuffer() の返り値がDataBufferIntで、 エラー: java.awt.image.DataBufferInt cannot be cast to java.awt.image.DataBufferByte が発生した場合(BufferedImageのタイプによります。この辺やこの辺を参考に。)、
といった感じで強引にbytes[]に直す。 pixels = getImageBytesForBufferedImageOfDataTypeSize1(img); Mat mat = new Mat(img.getHeight(),img.getWidth(),CvType.CV_8UC3); mat.put(0, 0, pixels);