Example usage for org.opencv.core Rect contains

List of usage examples for org.opencv.core Rect contains

Introduction

In this page you can find the example usage for org.opencv.core Rect contains.

Prototype

public boolean contains(Point p) 

Source Link

Usage

From source file:Comun.Imagen.java

public String dividirImagen(String nombreCarpeta) {
    StringBuilder SB = new StringBuilder();

    //Crea la carpeta donde alojar las imagenes
    this.nombreCarpeta = nombreCarpeta;
    File carpeta = new File(nombreCarpeta);
    if (carpeta.mkdir()) {
        Mat imgAux = new Mat();
        //Convertir la imagen en escala de grises a binario
        threshold(imagen, imgAux, 128, 255, THRESH_BINARY | THRESH_OTSU);

        //Dibuja los bordes
        double umbral = 100;
        Canny(imgAux, imgAux, umbral, umbral * 2);

        //Lista que guarda los puntos de los contornos
        LinkedList<MatOfPoint> contornos = new LinkedList<>();
        Mat jerarquia = new Mat();

        //Detecto los contornos
        findContours(imgAux, contornos, jerarquia, RETR_TREE, CHAIN_APPROX_SIMPLE);

        Rect contorno;//from  w w w  . j  av a  2s.c o  m

        if (!contornos.isEmpty()) {
            SB.append("Se han encontrado ").append(contornos.size()).append(" contornos -");

            double areaProm = 0;
            for (int i = 0; i < contornos.size(); i++) {
                contorno = boundingRect(contornos.get(i));
                areaProm += contorno.area();
            }

            //Asigna que para ser un contorno valido debe ser mayor al 10% del segundo mayor
            areaProm = (areaProm / contornos.size()) * 0.25;
            ArrayList<Rect> contornosFiltrados = new ArrayList<>();

            //Guarda las letras detectadas
            for (int i = 0; i < contornos.size(); i++) {

                contorno = boundingRect(contornos.get(i));
                //Verifica que supere el limite
                if (contorno.area() > areaProm) {
                    contornosFiltrados.add(contorno);
                }
            }
            //Ordeno los contornos de mayor a menor
            Mergesort merge = new Mergesort(contornosFiltrados);
            merge.ordenar();
            contornosFiltrados = merge.getV();

            //Filtro solo los contornos que no se superponen con otro
            ArrayList<Rect> contornosFinal = new ArrayList<>();
            boolean bandera = false;
            for (Rect recta : contornosFiltrados) {
                for (Rect c : contornosFinal) {
                    if (c.contains(recta.tl()) || c.contains(recta.br())) {
                        bandera = true;
                        break;
                    }
                }
                if (!bandera) {
                    //Agrego el contorno a la lista final de contornos
                    contornosFinal.add(recta);
                    //Guardo la imagen en la carpeta
                    this.guardarImagen(new Mat(imagen, recta), contornosFinal.size());

                    //La marca en la imagen principal
                    rectangle(imagen, new Point(recta.x, recta.y),
                            new Point(recta.x + recta.width, recta.y + recta.height), new Scalar(0, 255, 0));
                }
                bandera = false;
            }

            SB.append("Contornos Validos: ").append(contornosFinal.size());

        } else {
            SB.append("No se ha encontrado ningun contorno");
        }
    } else {
        SB.append("No se pudo crear la carpeta");
    }
    this.guardarImagen(imagen, 0);
    return SB.toString();
}

From source file:facerecognition.sample1.java

private static Rect find_enclosing_rectangle(double[][] puntos, File image_file) {

    Mat image = Imgcodecs.imread(image_file.getAbsolutePath());
    int i = 0;//w w w  . j  av  a2  s .  c  om
    Mat img2 = image.clone();
    for (CascadeClassifier faceDetector : faceDetectors) {

        // Detect faces in the image.
        // MatOfRect is a special container class for Rect.
        MatOfRect faceDetections = new MatOfRect();
        faceDetector.detectMultiScale(image, faceDetections);

        System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));

        // Draw a bounding box around each face.
        //            double percent = 0.4;
        for (Rect rect : faceDetections.toArray()) {
            Rect piv = rect.clone();
            //  falta expandir
            int h = piv.height, w = piv.width;
            piv.x -= w * percent / 2;
            piv.y -= h * percent / 2;
            piv.height *= (1 + percent);
            piv.width *= (1 + percent);

            //            Mat croped = new Mat(image, rect);
            //             Imgcodecs.imwrite("face"+(++i)+".png", croped);
            Imgproc.rectangle(img2, new Point(rect.x, rect.y),
                    new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 255, 0));

            int r = 10;
            boolean dentro = true;
            for (double[] punto : puntos) {
                //                    Imgproc.circle(img2, new Point(rect.x, rect.y), r, new Scalar(0, 255, 0));

                if (piv.contains(new Point(punto)) == false) {
                    dentro = false;
                    //                        break;
                }
            }
            if (dentro) {
                //                    Imgcodecs.imwrite(urlHelen + "\\face" + (Math.random()) + ".png", img2);
                return piv;
            }
        }

    }
    //        Imgcodecs.imwrite( urlHelen + "\\face"+(Math.random())+".png", img2);

    return null;
}

From source file:logic.featurepointextractor.MouthFPE.java

/**
 * Detect mouth feature points/*from w ww .jav  a  2  s. c  o  m*/
 * Algorithm:           Equalize histogram of mouth rect
 *                      Implement Sobel horizontal filter
 *                      Find corners
 *                      Invert color + Binarization
 *                      Find lip up and down points
 * @param mc
 * @return 
 */
@Override
public Point[] detect(MatContainer mc) {
    /**Algorithm
     *                  find pix(i) = (R-G)/R
     *                  normalize: 2arctan(pix(i))/pi
     */

    //find pix(i) = (R-G)/R
    Mat mouthRGBMat = mc.origFrame.submat(mc.mouthRect);
    List mouthSplitChannelsList = new ArrayList<Mat>();
    Core.split(mouthRGBMat, mouthSplitChannelsList);
    //extract R-channel
    Mat mouthR = (Mat) mouthSplitChannelsList.get(2);
    mouthR.convertTo(mouthR, CvType.CV_64FC1);
    //extract G-channel
    Mat mouthG = (Mat) mouthSplitChannelsList.get(1);
    mouthG.convertTo(mouthG, CvType.CV_64FC1);
    //calculate (R-G)/R
    Mat dst = new Mat(mouthR.rows(), mouthR.cols(), CvType.CV_64FC1);
    mc.mouthProcessedMat = new Mat(mouthR.rows(), mouthR.cols(), CvType.CV_64FC1);

    Core.absdiff(mouthR, mouthG, dst);
    //        Core.divide(dst, mouthR, mc.mouthProcessedMat);
    mc.mouthProcessedMat = dst;
    mc.mouthProcessedMat.convertTo(mc.mouthProcessedMat, CvType.CV_8UC1);
    Imgproc.equalizeHist(mc.mouthProcessedMat, mc.mouthProcessedMat);
    //       Imgproc.blur(mc.mouthProcessedMat, mc.mouthProcessedMat, new Size(4,4));
    //        Imgproc.morphologyEx(mc.mouthProcessedMat, mc.mouthProcessedMat, Imgproc.MORPH_OPEN, Imgproc.getStructuringElement(Imgproc.MORPH_ELLIPSE, new Size(4,4)));
    Imgproc.threshold(mc.mouthProcessedMat, mc.mouthProcessedMat, 230, 255, THRESH_BINARY);

    List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
    Imgproc.findContours(mc.mouthProcessedMat, contours, new Mat(), Imgproc.RETR_TREE,
            Imgproc.CHAIN_APPROX_SIMPLE);

    //find the biggest contour
    int maxSize = -1;
    int tmpSize = -1;
    int index = -1;

    Rect centMouthRect = new Rect(mc.mouthRect.x + mc.mouthRect.width / 4,
            mc.mouthRect.y + mc.mouthRect.height / 4, mc.mouthRect.width / 2, mc.mouthRect.height / 2);
    if (contours.size() != 0) {
        maxSize = contours.get(0).toArray().length;
        tmpSize = 0;
        index = 0;
    }

    //find max contour
    for (int j = 0; j < contours.size(); ++j) {
        //if contour is vertical, exclude it 
        Rect boundRect = Imgproc.boundingRect(contours.get(j));
        int centX = mc.mouthRect.x + boundRect.x + boundRect.width / 2;
        int centY = mc.mouthRect.y + boundRect.y + boundRect.height / 2;
        //                LOG.info("Center = " + centX + "; " + centY);
        //                LOG.info("Rect = " + centMouthRect.x + "; " + centMouthRect.y);
        if (!centMouthRect.contains(new Point(centX, centY)))
            continue;

        tmpSize = contours.get(j).toArray().length;

        LOG.info("Contour " + j + "; size = " + tmpSize);

        if (tmpSize > maxSize) {
            maxSize = tmpSize;
            index = j;
        }
    }

    //appproximate curve
    Point[] p1 = contours.get(index).toArray();
    MatOfPoint2f p2 = new MatOfPoint2f(p1);
    MatOfPoint2f p3 = new MatOfPoint2f();
    Imgproc.approxPolyDP(p2, p3, 1, true);

    p1 = p3.toArray();

    MatOfInt tmpMatOfPoint = new MatOfInt();
    Imgproc.convexHull(new MatOfPoint(p1), tmpMatOfPoint);

    Rect boundRect = Imgproc.boundingRect(new MatOfPoint(p1));
    if (boundRect.area() / mc.mouthRect.area() > 0.3)
        return null;

    int size = (int) tmpMatOfPoint.size().height;
    Point[] _p1 = new Point[size];
    int[] a = tmpMatOfPoint.toArray();

    _p1[0] = new Point(p1[a[0]].x + mc.mouthRect.x, p1[a[0]].y + mc.mouthRect.y);
    Core.circle(mc.origFrame, _p1[0], 3, new Scalar(0, 0, 255), -1);
    for (int i = 1; i < size; i++) {
        _p1[i] = new Point(p1[a[i]].x + mc.mouthRect.x, p1[a[i]].y + mc.mouthRect.y);
        Core.circle(mc.origFrame, _p1[i], 3, new Scalar(0, 0, 255), -1);
        Core.line(mc.origFrame, _p1[i - 1], _p1[i], new Scalar(255, 0, 0), 2);
    }
    Core.line(mc.origFrame, _p1[size - 1], _p1[0], new Scalar(255, 0, 0), 2);

    /*        contours.set(index, new MatOfPoint(_p1));
            
            mc.mouthProcessedMat.setTo(new Scalar(0));
                    
            Imgproc.drawContours(mc.mouthProcessedMat, contours, index, new Scalar(255), -1);
                    
    */ mc.mouthMatOfPoint = _p1;

    MatOfPoint matOfPoint = new MatOfPoint(_p1);
    mc.mouthBoundRect = Imgproc.boundingRect(matOfPoint);
    mc.features.mouthBoundRect = mc.mouthBoundRect;

    /**extract feature points:  1 most left
     *                          2 most right
     *                          3,4 up
     *                          5,6 down
     */

    //        mc.mouthMatOfPoint = extractFeaturePoints(contours.get(index));

    return null;
}

From source file:net.bsrc.cbod.opencv.OpenCV.java

public static boolean intersect(Rect r1, Rect r2) {

    Point[] points1 = getCornerPoints(r1);
    Point[] points2 = getCornerPoints(r2);

    for (int i = 0; i < points1.length; i++) {
        if (r2.contains(points1[i])) {
            return true;
        }//from w ww .  ja  v  a 2s.co  m
    }

    for (int i = 0; i < points2.length; i++) {
        if (r1.contains(points2[i])) {
            return true;
        }
    }

    return false;
}

From source file:simeav.Utils.java

public static boolean contiene(Rect rectangulo1, Rect rectangulo2) {
    return rectangulo1.contains(rectangulo2.br()) && rectangulo1.contains(rectangulo2.tl());
}