List of usage examples for org.opencv.core Rect contains
public boolean contains(Point p)
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()); }