Example usage for org.opencv.core Mat cols

List of usage examples for org.opencv.core Mat cols

Introduction

In this page you can find the example usage for org.opencv.core Mat cols.

Prototype

public int cols() 

Source Link

Usage

From source file:syncleus.dann.data.video.Grid.java

License:Apache License

public Grid(Mat img, Rect trackedBox, int minWinSide) {
    // TODO why do we generate so many BAD boxes, only to remove them later on !?
    // OR do we need them to re-asses which ones are bad later on ?
    for (int s = 0; s < SCALES.length; s++) {
        final int width = Math.round(trackedBox.width * SCALES[s]);
        final int height = Math.round(trackedBox.height * SCALES[s]);
        final int minBbSide = Math.min(height, width);

        // continue ONLY if the future box is "reasonable": bigger than the min window and smaller than the full image !
        if (minBbSide >= minWinSide && width <= img.cols() && height <= img.rows()) {
            trackedBoxScales.add(new Size(width, height));
            final int shift = Math.round(SHIFT * minBbSide);

            for (int row = 1; row < (img.rows() - height); row += shift) {
                for (int col = 1; col < (img.cols() - width); col += shift) {
                    final BoundingBox bbox = new BoundingBox();
                    bbox.x = col;/*from  w  w  w .  j  a v a2  s  .  c  o  m*/
                    bbox.y = row;
                    bbox.width = width;
                    bbox.height = height;
                    bbox.scaleIdx = trackedBoxScales.size() - 1; // currently last one in this list

                    grid.add(bbox);
                }
            }
        }
    }
}

From source file:syncleus.dann.data.video.Tld.java

License:Apache License

public void init(Mat frame1, Rect trackedBox) {
    // get Bounding boxes
    if (Math.min(trackedBox.width, trackedBox.height) < _params.min_win) {
        throw new IllegalArgumentException(
                "Provided trackedBox: " + trackedBox + " is too small (min " + _params.min_win + ")");
    }//ww w.j a  v a2s.com
    _grid = new Grid(frame1, trackedBox, _params.min_win);
    System.out.println("Init Created " + _grid.getSize() + " bounding boxes.");
    _grid.updateGoodBadBoxes(trackedBox, _params.num_closest_init);

    _iiRows = frame1.rows();
    _iiCols = frame1.cols();
    _iisum.create(_iiRows, _iiCols, CvType.CV_32F);
    _iisqsum.create(_iiRows, _iiCols, CvType.CV_64F);

    // correct bounding box
    _lastbox = _grid.getBestBox();

    _classifierFern.init(_grid.getTrackedBoxScales(), _rng);

    // generate DATA
    // generate POSITIVE DATA
    generatePositiveData(frame1, _params.num_warps_init, _grid);

    // Set variance threshold
    MatOfDouble stddev = new MatOfDouble();
    Core.meanStdDev(frame1.submat(_grid.getBestBox()), new MatOfDouble(), stddev);
    updateIntegralImgs(frame1);
    // this is directly half of the variance of the initial box, which will be used the the 1st stage of the classifier
    _var = (float) Math.pow(stddev.toArray()[0], 2d) * 0.5f;
    // check variance
    final double checkVar = TLDUtil.getVar(_grid.getBestBox(), _iisumJava, _iisqsumJava, _iiCols) * 0.5;
    System.out.println("Variance: " + _var + " / Check variance: " + checkVar);

    // generate NEGATIVE DATA
    final Pair<List<Pair<int[], Boolean>>, List<Mat>> negData = generateNegativeData(frame1);

    // Split Negative Ferns <features, labels=false> into Training and Testing sets (they are already shuffled)
    final int nFernsSize = negData.first.size();
    final List<Pair<int[], Boolean>> nFernsTest = new ArrayList<Pair<int[], Boolean>>(
            negData.first.subList(0, nFernsSize / 2));
    final List<Pair<int[], Boolean>> nFerns = new ArrayList<Pair<int[], Boolean>>(
            negData.first.subList(nFernsSize / 2, nFernsSize));

    // Split Negative NN Examples into Training and Testing sets
    final int nExSize = negData.second.size();
    final List<Mat> nExamplesTest = new ArrayList<Mat>(negData.second.subList(0, nExSize / 2));
    _nExamples = new ArrayList<Mat>(negData.second.subList(nExSize / 2, nExSize));

    //MERGE Negative Data with Positive Data and shuffle it
    final List<Pair<int[], Boolean>> fernsData = new ArrayList<Pair<int[], Boolean>>(_pFerns);
    fernsData.addAll(nFerns);
    Collections.shuffle(fernsData);

    // TRAINING
    System.out.println("Init Start Training with " + fernsData.size() + " ferns, " + _nExamples.size()
            + " nExamples, " + nFernsTest.size() + " nFernsTest, " + nExamplesTest.size() + " nExamplesTest");
    _classifierFern.trainF(fernsData, 10);
    _classifierNN.trainNN(_pExample, _nExamples);
    // Threshold evaluation on testing sets
    _classifierFern.evaluateThreshold(nFernsTest);
    _classifierNN.evaluateThreshold(nExamplesTest);
}

From source file:syncleus.dann.data.video.Tld.java

License:Apache License

private TrackingStruct track(final Mat lastImg, final Mat currentImg, final BoundingBox lastBox) {
    System.out.println("[TRACK]");

    // Generate points
    final Point[] lastPoints = lastBox.points();
    if (lastPoints.length == 0) {
        System.out.println("Points not generated from lastBox: " + lastBox);
        return null;
    }//  w w  w.j av  a  2s .c  o m

    // Frame-to-frame tracking with forward-backward error checking
    final Pair<Point[], Point[]> trackedPoints = _tracker.track(lastImg, currentImg, lastPoints);
    if (trackedPoints == null) {
        System.out.println("No points could be tracked.");
        return null;
    }
    if (_tracker.getMedianErrFB() > _params.tracker_stability_FBerrMax) {
        System.out.println("TRACKER too unstable. FB Median error: " + _tracker.getMedianErrFB() + " > "
                + _params.tracker_stability_FBerrMax);
        // return null;  // we hope the detection will find the pattern again
    }

    // bounding box prediction
    final BoundingBox predictedBB = lastBox.predict(trackedPoints.first, trackedPoints.second);
    if (predictedBB.x > currentImg.cols() || predictedBB.y > currentImg.rows() || predictedBB.br().x < 1
            || predictedBB.br().y < 1) {
        System.out.println("TRACKER Predicted bounding box out of range !");
        return null;
    }

    // estimate Confidence
    Mat pattern = new Mat();
    try {
        resizeZeroMeanStdev(currentImg.submat(predictedBB.intersect(currentImg)), pattern, _params.patch_size);
    } catch (Throwable t) {
        System.out.println("PredBB when failed: " + predictedBB);
    }
    //System.out.println("Confidence " + pattern.dump());      

    //Conservative Similarity
    final NNConfStruct nnConf = _classifierNN.nnConf(pattern);
    System.out.println("Tracking confidence: " + nnConf.conservativeSimilarity);

    System.out.println("[TRACK END]");
    return new TrackingStruct(nnConf.conservativeSimilarity, predictedBB, trackedPoints.first,
            trackedPoints.second);
}

From source file:syncleus.dann.data.video.Tld.java

License:Apache License

/**
 * Structure the classifier into 3 stages:
 * a) patch variance/*  w  ww. j  a  va 2  s .c om*/
 * b) ensemble of ferns classifier
 * c) nearest neighbour
 */
private Pair<List<DetectionStruct>, List<DetectionStruct>> detect(final Mat frame) {
    System.out.println("[DETECT]");

    final List<DetectionStruct> fernClassDetected = new ArrayList<Tld.DetectionStruct>(); //dt
    final List<DetectionStruct> nnMatches = new ArrayList<Tld.DetectionStruct>(); //dbb

    // 0. Cleaning
    _boxClusterMap.clear();

    // 1. DETECTION
    final Mat img = new Mat(frame.rows(), frame.cols(), CvType.CV_8U);
    updateIntegralImgs(frame);
    Imgproc.GaussianBlur(frame, img, new Size(9, 9), 1.5);

    // Apply the Variance filter TODO : Bottleneck
    int a = 0;
    for (BoundingBox box : _grid) {
        // a) speed up by doing the features/ferns check ONLY if the variance is high enough !
        if (TLDUtil.getVar(box, _iisumJava, _iisqsumJava, _iiCols) >= _var) {
            a++;
            final Mat patch = img.submat(box);
            final int[] allFernsHashCodes = _classifierFern.getAllFernsHashCodes(patch, box.scaleIdx);
            final double averagePosterior = _classifierFern.averagePosterior(allFernsHashCodes);
            _fernDetectionNegDataForLearning.put(box, allFernsHashCodes);// store for later use in learning

            // b)
            if (averagePosterior > _classifierFern.getFernPosThreshold()) {
                fernClassDetected.add(new DetectionStruct(box, allFernsHashCodes, averagePosterior, patch));
            }
        }
    }

    System.out.println(a + " Bounding boxes passed the variance filter (" + _var + ")");
    System.out.println(fernClassDetected.size() + " Initial detected from Fern Classifier");
    if (fernClassDetected.size() == 0) {
        System.out.println("[DETECT END]");
        return null;
    }

    // keep only the best
    TLDUtil.keepBestN(fernClassDetected, MAX_DETECTED, new Comparator<DetectionStruct>() {
        @Override
        public int compare(DetectionStruct detS1, DetectionStruct detS2) {
            return Double.compare(detS1.averagePosterior, detS2.averagePosterior);
        }
    });

    // 2. MATCHING using the NN classifier  c)
    for (DetectionStruct detStruct : fernClassDetected) {
        // update detStruct.patch to params.patch_size and normalise it
        Mat pattern = new Mat();
        resizeZeroMeanStdev(detStruct.patch, pattern, _params.patch_size);
        detStruct.nnConf = _classifierNN.nnConf(pattern);

        System.out.println("NNConf: " + detStruct.nnConf.relativeSimilarity + " / "
                + detStruct.nnConf.conservativeSimilarity + " Threshold: " + _classifierNN.getNNThreshold());
        // only keep valid boxes
        if (detStruct.nnConf.relativeSimilarity > _classifierNN.getNNThreshold()) {
            nnMatches.add(detStruct);
        }
    }

    System.out.println("[DETECT END]");
    return new Pair<List<DetectionStruct>, List<DetectionStruct>>(fernClassDetected, nnMatches);
}

From source file:TarHadoop.TarToSeqFile.java

License:Apache License

/** Performs the conversion. */
public void execute(String inputFolder) throws Exception {
    SequenceFile.Writer output = null;
    try {/*from  ww  w  . j av a 2 s  . c  o  m*/
        output = openOutputFile();
        DirectoryStructure obj = new DirectoryStructure();
        List<String> listOfImgPath = obj.getAllImgPaths(inputFolder);
        int i = 0;
        //String prevName="";
        //String value="";
        Text key = new Text();
        for (Iterator<String> iterator = listOfImgPath.iterator(); iterator.hasNext();) {
            String imgPath = (String) iterator.next();

            Mat img1 = Highgui.imread(imgPath);

            String[] tokens = imgPath.split("/");
            String currName = tokens[tokens.length - 2];
            System.out.println(i + " of imgPath = " + currName + "   " + listOfImgPath.size());

            byte[] data = new byte[(int) img1.total() * (int) img1.elemSize()];
            img1.get(0, 0, data);

            key = new Text(currName + "," + img1.rows() + "," + img1.cols());
            BytesWritable value = new BytesWritable(data);
            output.append(key, value);

            /*if(i==0)
               prevName=currName;
            if(currName.compareTo(prevName)==0){
               byte[] data=new byte[(int)img1.total()*(int)img1.elemSize()];
               img1.get(0,0,data);
               String x=new String(data,"UTF-8");
               value+=x+"###";
            }
            else{
               key=new Text(imgPath+","+img1.rows()+","+img1.cols());
               hadoopvalue=new Text(value);
               output.append(key, hadoopvalue);
               prevName=currName;
               value="";
            }*/
            ++i;
        }
    } finally {
        //if (input != null) { input.close(); }
        if (output != null) {
            output.close();
        }
    }
}

From source file:tisir.forms.ImageObjetForm.java

public void traitementImages(String nomImage, String nomFichier, String dossierDestinationImage,
        Map<String, Mat> listHierarchies, Map<String, Mat> listContours) {
    //System.out.println("Matrice de l'image :" + Imgcodecs.imread(nomImage.toString()).dump());
    System.out.println("chemin d'accs  l'image : " + nomImage);
    Mat matriceImage = Imgcodecs.imread(nomImage); //Chargement de l'image dans une matrice carre
    Mat matImageArecuperer1 = new Mat();
    Mat matImageArecuperer2 = new Mat();
    Mat matImageArecuperer = new Mat();
    Mat matFinaleOperateurMorphologiq = new Mat();

    System.out.printf("%s", "Conversion de la matrice openCV d'image en BufferedImage (java) en cours ...");

    System.out.printf("MatriceImage.channels () : %s\n", matriceImage.channels());

    int elementBufferedImage = BufferedImage.TYPE_BYTE_GRAY;
    if (matriceImage.channels() > 1) {
        Mat matImageSansBruit = new Mat();
        Mat matImageSansBruitEnHSV = new Mat();

        //Suppression de bruit dans l'image encours
        Imgproc.bilateralFilter(matriceImage, matImageSansBruit, 5, 175, 175);
        ///Imgproc.blur(matriceImage, matImageSansBruit, new Size(15,15));

        //Conversion en HSV
        Imgproc.cvtColor(matImageSansBruit, matImageSansBruitEnHSV, Imgproc.COLOR_BGR2HSV);
        elementBufferedImage = BufferedImage.TYPE_3BYTE_BGR;
        matriceImage = matImageSansBruitEnHSV; //Cette matrice est ncessaire pour la dtection
    }//from ww w  .  ja  va  2  s  .  com

    //Rcupration des seuils min et max de H, S et V avant les couleurs vert
    Scalar valHSVmin = new Scalar(VALEURDEBUTHUE, VALEURDEBUTSATURATION, VALEURDEBUTVALUE);
    Scalar valHSVmax = new Scalar(VALEURFINHUE, VALEURFINSATURATION, VALEURFINVALUE);

    //Rcupration des seuils min et max de H, S et V aprs les couleurs vert
    Scalar valHSVmin2 = new Scalar(VALEURDEBUTHUE2, VALEURDEBUTSATURATION, VALEURDEBUTVALUE);
    Scalar valHSVmax2 = new Scalar(VALEURFINHUE2, VALEURFINSATURATION, VALEURFINVALUE);

    System.out.printf("Intervalle de valeurs fix de HUE avant les couleurs  dominance vert : %s%s%s",
            String.valueOf(valHSVmin.val[0]), " - ", String.valueOf(valHSVmax.val[0]));
    System.out.printf("Intervalle de valeurs fix de HUE aprs les couleurs  dominance vert : %s%s%s",
            String.valueOf(valHSVmin2.val[0]), " - ", String.valueOf(valHSVmax2.val[0]));
    System.out.printf("Intervalle de valeurs fix de SATURATION : %s%s%s", String.valueOf(valHSVmin.val[1]),
            " - ", String.valueOf(valHSVmax.val[1]));
    System.out.printf("Intervalle de valeurs fix de HUE : %s%s%s", String.valueOf(valHSVmin.val[2]), " - ",
            String.valueOf(valHSVmax.val[2]));

    //////////Filtre pour laisser passer uniquement les couleurs ne contenant pas vert
    Core.inRange(matriceImage, valHSVmin, valHSVmax, matImageArecuperer1);
    Core.inRange(matriceImage, valHSVmin2, valHSVmax2, matImageArecuperer2);

    //On associe les lments de "matImageArecuperer1"  ceux de "matImageArecuperer2"
    Core.add(matImageArecuperer1, matImageArecuperer2, matImageArecuperer);

    //Affichage  l'cran de donnes binaires de l'image en cours
    byte[] byteImage = new byte[matriceImage.channels() * matriceImage.cols() * matriceImage.rows()];
    matriceImage.get(0, 0, byteImage);
    ///System.out.println(nomFichier + " :: byteImage en cours : " + Arrays.toString(byteImage));

    //criture des donnes de l'image encours "matriceImage" dans un BufferedImage
    BufferedImage imageEncours = new BufferedImage(matriceImage.cols(), matriceImage.rows(),
            elementBufferedImage);
    imageEncours.getRaster().setDataElements(0, 0, matriceImage.cols(), matriceImage.rows(), byteImage);

    //criture de l'image sur disque
    long id = System.currentTimeMillis();
    String n = nomFichier;
    n = n + "ImageSansBruitEnHSV" + id + ".png";
    ecritureDonneesImagesOpenCVdansUnFichierPNG(imageEncours, n, dossierDestinationImage);

    //criture des donnes de l'image  reccuprer "matImageArecuperer" dans un BufferedImage
    byte[] byteImageArecuperer = new byte[matImageArecuperer.channels() * matImageArecuperer.cols()
            * matImageArecuperer.rows()];
    matImageArecuperer.get(0, 0, byteImageArecuperer);
    ///System.out.println(nomFichier +  " :: byteImageArecuperer en cours : " + Arrays.toString(byteImageArecuperer));

    BufferedImage imageArecuperer = new BufferedImage(matImageArecuperer.cols(), matImageArecuperer.rows(),
            BufferedImage.TYPE_BYTE_BINARY);
    imageArecuperer.getRaster().setDataElements(0, 0, matImageArecuperer.cols(), matImageArecuperer.rows(),
            byteImageArecuperer);

    n = nomFichier + "ImageSansBruitEnHSVaRecuperer" + id + ".png";
    ecritureDonneesImagesOpenCVdansUnFichierPNG(imageArecuperer, n, dossierDestinationImage);

    System.out.printf("%s",
            "Conversion de la matrice openCV d'image en BufferedImage (java) effectue avec succs!!!");

    //Matrices des oprateurs erode et dilate
    Mat matPortionImageErode = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(7, 7));
    Mat matPortionImageDilate = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(10, 10));

    Imgproc.erode(matImageArecuperer, matFinaleOperateurMorphologiq, matPortionImageErode);
    Imgproc.erode(matImageArecuperer, matFinaleOperateurMorphologiq, matPortionImageErode);

    Imgproc.dilate(matImageArecuperer, matFinaleOperateurMorphologiq, matPortionImageDilate);
    Imgproc.dilate(matImageArecuperer, matFinaleOperateurMorphologiq, matPortionImageDilate);

    //criture des donnes de l'image  reccuprer "matImageArecuperer" dans un BufferedImage
    byte[] byteImageArecupOpMorph = new byte[matFinaleOperateurMorphologiq.channels()
            * matFinaleOperateurMorphologiq.cols() * matFinaleOperateurMorphologiq.rows()];
    matFinaleOperateurMorphologiq.get(0, 0, byteImageArecupOpMorph);
    ///System.out.println(nomFichier + " :: byteImageArecupOpMorph en cours : " + Arrays.toString(byteImageArecupOpMorph));

    BufferedImage imageArecupOpMorph = new BufferedImage(matFinaleOperateurMorphologiq.cols(),
            matFinaleOperateurMorphologiq.rows(), BufferedImage.TYPE_BYTE_BINARY);
    imageArecupOpMorph.getRaster().setDataElements(0, 0, matFinaleOperateurMorphologiq.cols(),
            matFinaleOperateurMorphologiq.rows(), byteImageArecupOpMorph);

    n = nomFichier + "ImageSansBruitEnHSVaRecupOpMorphologiq" + id + ".png";
    ecritureDonneesImagesOpenCVdansUnFichierPNG(imageArecupOpMorph, n, dossierDestinationImage);

    //Dterminer les contours des objets
    List<MatOfPoint> contoursObjets = new ArrayList<>();
    Mat hierarchieObjet = new Mat();

    /*Il me faut :
    - hierarchieObjet pour toutes images du dossier tisirImages
    - hierarchieObjet pour l'image capture
    - contoursObjets pour chaque hierarchieObjet des images du dossier tisirImages
    - contoursObjets pour hierarchieObjet de l'image capture
    */

    //trouver les contours
    Imgproc.findContours(matFinaleOperateurMorphologiq, contoursObjets, hierarchieObjet, Imgproc.RETR_CCOMP,
            Imgproc.CHAIN_APPROX_SIMPLE);

    //S'il y a des contours 
    if (hierarchieObjet.size().height > 0 && hierarchieObjet.size().width > 0) {

        listHierarchies.put(nomFichier + "MatriceHierarchie", hierarchieObjet);

        for (int i = 0; i >= 0; i = (int) hierarchieObjet.get(0, i)[0]) {
            //Conversion des MatOfPoints de "contoursObjets" en Lis<Point>
            List<Point> listPointsContoursObjets = new ArrayList<>();
            for (int j = 0; j < contoursObjets.size(); j++) {
                //Conversion des MatOfPoints de "contoursObjets" en cours en Lis<Point>
                List<Point> listPointsContoursObjetsEncours = new ArrayList<>();
                listPointsContoursObjetsEncours.addAll(contoursObjets.get(j).toList());
                //Coversion de la liste points du contour listPointsContoursObjetsEncours en Matrice
                Mat matPointContoursObjetsEncours = Converters
                        .vector_Point_to_Mat(listPointsContoursObjetsEncours);
                ///Calcul de la superficie du contours en cours
                double superficieContoursObjetEncours = Imgproc.contourArea(matPointContoursObjetsEncours);
                System.out.println(nomFichier + "::-:: matPointContoursObjets de contoursObjets  " + j
                        + " \n\t\t Taille de la matrice : " + matPointContoursObjetsEncours.size().width + " X "
                        + matPointContoursObjetsEncours.size().height
                        + " \n\t\t:: Surperficie de contoursObjets  "
                        + Math.round(superficieContoursObjetEncours));
                System.out.println();

                //Si la superficie du contours est assez grande  SUPERFICIEMINIMALE_CONTOURS, alors on l'ajoute dans la grande liste
                //On limine systmatiquement les petits contours
                if (superficieContoursObjetEncours >= SUPERFICIEMINIMALE_CONTOURS) {
                    listPointsContoursObjets.addAll(contoursObjets.get(j).toList());
                }
            }

            System.out.println(nomFichier + ":: listPointsContoursObjets :: liste des points P du contours : "
                    + listPointsContoursObjets.toString());
            System.out.println();

            //Coversion de la liste points du contour listPointsContoursObjets en Matrice
            Mat matPointContoursObjets = Converters.vector_Point_to_Mat(listPointsContoursObjets);
            ///Calcul de la superficie du contours
            double superficieContoursObjet = Imgproc.contourArea(matPointContoursObjets);
            System.out.println(nomFichier + " :: matPointContoursObjets de contoursObjets  " + i
                    + " \n\t\t Taille de la matrice : " + matPointContoursObjets.size().width + " X "
                    + matPointContoursObjets.size().height + " \n\t\t:: Surperficie de contoursObjets  "
                    + Math.round(superficieContoursObjet));
            System.out.println("------------------------------------------------");

            /// old ::: listContours.put(nomFichier+"MatriceHierarchie_ContoursObjets" + String.valueOf(i), contoursObjets);
            listContours.put(nomFichier + "MatriceHierarchie_ContoursObjets" + String.valueOf(i),
                    matPointContoursObjets);
            Imgproc.drawContours(matriceImage, contoursObjets, i, new Scalar(255, 255, 255), 3);

            System.out.println("--RSUM CONTOURS ET HIERARCHIE CONTOURS----");
            System.out.println();
            System.out.println(nomFichier + " \n\t\t :: Taille de listHierarchies " + listHierarchies.size()
                    + " \n\t\t :: Taille de  listContours : " + listContours.size());
            System.out.println();
            System.out.println("===============================");
            System.out.println("===============================");
        }
    }

    //criture des donnes de l'image  reccuprer "matriceImage" dans un BufferedImage
    byteImage = new byte[matriceImage.channels() * matriceImage.cols() * matriceImage.rows()];
    matriceImage.get(0, 0, byteImage);
    ///System.out.println(nomFichier + " :: byteImage en cours : " + Arrays.toString(byteImage));

    //criture des donnes de l'image encours "matriceImage" dans un BufferedImage
    imageEncours = new BufferedImage(matriceImage.cols(), matriceImage.rows(), elementBufferedImage);
    imageEncours.getRaster().setDataElements(0, 0, matriceImage.cols(), matriceImage.rows(), byteImage);

    n = nomFichier + "ImageSansBruitEnHSVobjetDetecte" + id + ".png";
    ecritureDonneesImagesOpenCVdansUnFichierPNG(imageEncours, n, dossierDestinationImage);
}

From source file:tisir.forms.ImageObjetForm.java

public void traitementImages(String nomImage, String nomFichier, String dossierDestinationImage,
        Map<String, Mat> listHierarchies, Map<String, Mat> listContours) {
    //System.out.println("Matrice de l'image :" + Imgcodecs.imread(nomImage.toString()).dump());
    System.out.println("chemin d'accs  l'image : " + nomImage);
    Mat matriceImage = Imgcodecs.imread(nomImage); //Chargement de l'image dans une matrice carre
    Mat matImageArecuperer1 = new Mat();
    Mat matImageArecuperer2 = new Mat();
    Mat matImageArecuperer = new Mat();
    Mat matFinaleOperateurMorphologiq = new Mat();

    //Initialisation du bean reprsentant la donne d'une image d'objet
    ImageObjetBean imageobjet = new ImageObjetBean();

    System.out.printf("%s", "Conversion de la matrice openCV d'image en BufferedImage (java) en cours ...");

    System.out.printf("MatriceImage.channels () : %s\n", matriceImage.channels());

    int elementBufferedImage = BufferedImage.TYPE_BYTE_GRAY;
    if (matriceImage.channels() > 1) {
        Mat matImageSansBruit = new Mat();
        Mat matImageSansBruitEnHSV = new Mat();

        //Suppression de bruit dans l'image encours
        Imgproc.bilateralFilter(matriceImage, matImageSansBruit, 5, 175, 175);
        ///Imgproc.blur(matriceImage, matImageSansBruit, new Size(15,15));

        //Conversion en HSV
        Imgproc.cvtColor(matImageSansBruit, matImageSansBruitEnHSV, Imgproc.COLOR_BGR2HSV);
        elementBufferedImage = BufferedImage.TYPE_3BYTE_BGR;
        matriceImage = matImageSansBruitEnHSV; //Cette matrice est ncessaire pour la dtection
    }/*from   w ww  .  ja  va 2 s .  c  o m*/

    //Rcupration des seuils min et max de H, S et V avant les couleurs vert
    Scalar valHSVmin = new Scalar(VALEURDEBUTHUE, VALEURDEBUTSATURATION, VALEURDEBUTVALUE);
    Scalar valHSVmax = new Scalar(VALEURFINHUE, VALEURFINSATURATION, VALEURFINVALUE);

    //Rcupration des seuils min et max de H, S et V aprs les couleurs vert
    Scalar valHSVmin2 = new Scalar(VALEURDEBUTHUE2, VALEURDEBUTSATURATION, VALEURDEBUTVALUE);
    Scalar valHSVmax2 = new Scalar(VALEURFINHUE2, VALEURFINSATURATION, VALEURFINVALUE);

    System.out.printf("Intervalle de valeurs fix de HUE avant les couleurs  dominance vert : %s%s%s",
            String.valueOf(valHSVmin.val[0]), " - ", String.valueOf(valHSVmax.val[0]));
    System.out.printf("Intervalle de valeurs fix de HUE aprs les couleurs  dominance vert : %s%s%s",
            String.valueOf(valHSVmin2.val[0]), " - ", String.valueOf(valHSVmax2.val[0]));
    System.out.printf("Intervalle de valeurs fix de SATURATION : %s%s%s", String.valueOf(valHSVmin.val[1]),
            " - ", String.valueOf(valHSVmax.val[1]));
    System.out.printf("Intervalle de valeurs fix de HUE : %s%s%s", String.valueOf(valHSVmin.val[2]), " - ",
            String.valueOf(valHSVmax.val[2]));

    //////////Filtre pour laisser passer uniquement les couleurs ne contenant pas vert
    Core.inRange(matriceImage, valHSVmin, valHSVmax, matImageArecuperer1);
    Core.inRange(matriceImage, valHSVmin2, valHSVmax2, matImageArecuperer2);

    //On associe les lments de "matImageArecuperer1"  ceux de "matImageArecuperer2"
    Core.add(matImageArecuperer1, matImageArecuperer2, matImageArecuperer);

    //Affichage  l'cran de donnes binaires de l'image en cours
    byte[] byteImage = new byte[matriceImage.channels() * matriceImage.cols() * matriceImage.rows()];
    matriceImage.get(0, 0, byteImage);
    ///System.out.println(nomFichier + " :: byteImage en cours : " + Arrays.toString(byteImage));

    //criture des donnes de l'image encours "matriceImage" dans un BufferedImage
    BufferedImage imageEncours = new BufferedImage(matriceImage.cols(), matriceImage.rows(),
            elementBufferedImage);
    imageEncours.getRaster().setDataElements(0, 0, matriceImage.cols(), matriceImage.rows(), byteImage);

    //criture de l'image sur disque
    long id = System.currentTimeMillis();
    String n = nomFichier;
    n = n + "ImageSansBruitEnHSV" + id + ".png";
    ecritureDonneesImagesOpenCVdansUnFichierPNG(imageEncours, n, dossierDestinationImage);

    //criture des donnes de l'image  reccuprer "matImageArecuperer" dans un BufferedImage
    byte[] byteImageArecuperer = new byte[matImageArecuperer.channels() * matImageArecuperer.cols()
            * matImageArecuperer.rows()];
    matImageArecuperer.get(0, 0, byteImageArecuperer);
    ///System.out.println(nomFichier +  " :: byteImageArecuperer en cours : " + Arrays.toString(byteImageArecuperer));

    BufferedImage imageArecuperer = new BufferedImage(matImageArecuperer.cols(), matImageArecuperer.rows(),
            BufferedImage.TYPE_BYTE_BINARY);
    imageArecuperer.getRaster().setDataElements(0, 0, matImageArecuperer.cols(), matImageArecuperer.rows(),
            byteImageArecuperer);

    n = nomFichier + "ImageSansBruitEnHSVaRecuperer" + id + ".png";
    ecritureDonneesImagesOpenCVdansUnFichierPNG(imageArecuperer, n, dossierDestinationImage);

    System.out.printf("%s",
            "Conversion de la matrice openCV d'image en BufferedImage (java) effectue avec succs!!!");

    //Matrices des oprateurs erode et dilate
    Mat matPortionImageErode = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(7, 7));
    Mat matPortionImageDilate = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(10, 10));

    Imgproc.erode(matImageArecuperer, matFinaleOperateurMorphologiq, matPortionImageErode);
    Imgproc.erode(matImageArecuperer, matFinaleOperateurMorphologiq, matPortionImageErode);

    Imgproc.dilate(matImageArecuperer, matFinaleOperateurMorphologiq, matPortionImageDilate);
    Imgproc.dilate(matImageArecuperer, matFinaleOperateurMorphologiq, matPortionImageDilate);

    //criture des donnes de l'image  reccuprer "matImageArecuperer" dans un BufferedImage
    byte[] byteImageArecupOpMorph = new byte[matFinaleOperateurMorphologiq.channels()
            * matFinaleOperateurMorphologiq.cols() * matFinaleOperateurMorphologiq.rows()];
    matFinaleOperateurMorphologiq.get(0, 0, byteImageArecupOpMorph);
    ///System.out.println(nomFichier + " :: byteImageArecupOpMorph en cours : " + Arrays.toString(byteImageArecupOpMorph));

    BufferedImage imageArecupOpMorph = new BufferedImage(matFinaleOperateurMorphologiq.cols(),
            matFinaleOperateurMorphologiq.rows(), BufferedImage.TYPE_BYTE_BINARY);
    imageArecupOpMorph.getRaster().setDataElements(0, 0, matFinaleOperateurMorphologiq.cols(),
            matFinaleOperateurMorphologiq.rows(), byteImageArecupOpMorph);

    n = nomFichier + "ImageSansBruitEnHSVaRecupOpMorphologiq" + id + ".png";
    ecritureDonneesImagesOpenCVdansUnFichierPNG(imageArecupOpMorph, n, dossierDestinationImage);

    //Affectation de la valeur de proprit NomImage du bean 
    imageobjet.setNomImage(nomFichier);
    //Affectation de la valeur de proprit NomImage du bean 
    imageobjet.setDonneeImage(Arrays.toString(byteImageArecupOpMorph));
    //Affectation de la valeur de proprit MatriceDonneeImage du bean 
    imageobjet.setMatriceDonneeImage(matFinaleOperateurMorphologiq);
    //Affectation de la valeur de proprit LargeurImage du bean 
    imageobjet.setLargeurImage((int) Math.round(matFinaleOperateurMorphologiq.size().width));
    //Affectation de la valeur de proprit HauteurImage du bean 
    imageobjet.setHauteurImage((int) Math.round(matFinaleOperateurMorphologiq.size().height));

    //Dterminer les contours des objets
    List<MatOfPoint> contoursObjets = new ArrayList<>();
    Mat hierarchieObjet = new Mat();

    //trouver les contours
    Imgproc.findContours(matFinaleOperateurMorphologiq, contoursObjets, hierarchieObjet, Imgproc.RETR_CCOMP,
            Imgproc.CHAIN_APPROX_SIMPLE);

    //S'il y a des contours 
    if (hierarchieObjet.size().height > 0 && hierarchieObjet.size().width > 0) {

        listHierarchies.put(nomFichier + "MatriceHierarchie", hierarchieObjet);

        //criture des donnes de l'hirarchie des contours d'image "hierarchieObjet" dans un BufferedImage
        byte[] byteHierarchieObjet = new byte[hierarchieObjet.channels() * hierarchieObjet.cols()
                * hierarchieObjet.rows()];
        //hierarchieObjet.get(0, 0, byteHierarchieObjet);

        //Affectation de la valeur de proprit donneeHierarchieDonneeImage du bean 
        imageobjet.setDonneeHierarchieDonneeImage(Arrays.toString(byteHierarchieObjet));
        //Affectation de la valeur de proprit MatriceHierarchieDonneeImage du bean 
        imageobjet.setMatriceHierarchieDonneeImage(hierarchieObjet);
        //Affectation de la valeur de proprit LargeurImageH du bean 
        imageobjet.setLargeurImageH((int) Math.round(hierarchieObjet.size().width));
        //Affectation de la valeur de proprit HauteurImageH du bean 
        imageobjet.setHauteurImageH((int) Math.round(hierarchieObjet.size().height));

        //criture des donnes de l'hirarchie des contours d'image "hierarchieObjet" sur disaue
        BufferedImage imageArecupHierarchieObjet = new BufferedImage(hierarchieObjet.cols(),
                hierarchieObjet.rows(), BufferedImage.TYPE_BYTE_BINARY);
        imageArecupHierarchieObjet.getRaster().setDataElements(0, 0, hierarchieObjet.cols(),
                hierarchieObjet.rows(), byteHierarchieObjet);

        n = nomFichier + "ImageSansBruitEnHSVHierarchieContours" + id + ".png";
        ecritureDonneesImagesOpenCVdansUnFichierPNG(imageArecupHierarchieObjet, n, dossierDestinationImage);

        for (int i = 0; i >= 0; i = (int) hierarchieObjet.get(0, i)[0]) {
            //Conversion des MatOfPoints de "contoursObjets" en Lis<Point>
            List<Point> listPointsContoursObjets = new ArrayList<>();
            for (int j = 0; j < contoursObjets.size(); j++) {
                //Conversion des MatOfPoints de "contoursObjets" en cours en Lis<Point>
                List<Point> listPointsContoursObjetsEncours = new ArrayList<>();
                listPointsContoursObjetsEncours.addAll(contoursObjets.get(j).toList());
                //Coversion de la liste points du contour listPointsContoursObjetsEncours en Matrice
                Mat matPointContoursObjetsEncours = Converters
                        .vector_Point_to_Mat(listPointsContoursObjetsEncours);
                ///Calcul de la superficie du contours en cours
                double superficieContoursObjetEncours = Imgproc.contourArea(matPointContoursObjetsEncours);
                System.out.println(nomFichier + "::-:: matPointContoursObjets de contoursObjets  " + j
                        + " \n\t\t Taille de la matrice : " + matPointContoursObjetsEncours.size().width + " X "
                        + matPointContoursObjetsEncours.size().height
                        + " \n\t\t:: Surperficie de contoursObjets  "
                        + Math.round(superficieContoursObjetEncours));
                System.out.println();

                //Si la superficie du contours est assez grande  SUPERFICIEMINIMALE_CONTOURS, alors on l'ajoute dans la grande liste
                //On limine systmatiquement les petits contours
                if (superficieContoursObjetEncours >= SUPERFICIEMINIMALE_CONTOURS) {
                    listPointsContoursObjets.addAll(contoursObjets.get(j).toList());
                }
            }

            System.out.println(nomFichier + ":: listPointsContoursObjets :: liste des points P du contours : "
                    + listPointsContoursObjets.toString());
            System.out.println();

            //Coversion de la liste points du contour listPointsContoursObjets en Matrice
            Mat matPointContoursObjets = Converters.vector_Point_to_Mat(listPointsContoursObjets);
            ///Calcul de la superficie du contours
            double superficieContoursObjet = Imgproc.contourArea(matPointContoursObjets);
            System.out.println(nomFichier + " :: matPointContoursObjets de contoursObjets  " + i
                    + " \n\t\t Taille de la matrice : " + matPointContoursObjets.size().width + " X "
                    + matPointContoursObjets.size().height + " \n\t\t:: Surperficie de contoursObjets  "
                    + Math.round(superficieContoursObjet));
            System.out.println("------------------------------------------------");

            listContours.put(nomFichier + "MatriceHierarchie_ContoursObjets" + String.valueOf(i),
                    matPointContoursObjets);

            //Traage des contours
            Imgproc.drawContours(matriceImage, contoursObjets, i, new Scalar(255, 255, 255), 3);

            System.out.println("--RSUM CONTOURS ET HIERARCHIE CONTOURS----");
            System.out.println();
            System.out.println(nomFichier + " \n\t\t :: Taille de listHierarchies " + listHierarchies.size()
                    + " \n\t\t :: Taille de  listContours : " + listContours.size());
            System.out.println();
            System.out.println("===============================");
            System.out.println("===============================");
        }
    }

    //criture des donnes de l'image  reccuprer "matriceImage" dans un BufferedImage
    byteImage = new byte[matriceImage.channels() * matriceImage.cols() * matriceImage.rows()];
    matriceImage.get(0, 0, byteImage);
    ///System.out.println(nomFichier + " :: byteImage en cours : " + Arrays.toString(byteImage));

    //criture des donnes de l'image encours "matriceImage" dans un BufferedImage
    imageEncours = new BufferedImage(matriceImage.cols(), matriceImage.rows(), elementBufferedImage);
    imageEncours.getRaster().setDataElements(0, 0, matriceImage.cols(), matriceImage.rows(), byteImage);

    n = nomFichier + "ImageSansBruitEnHSVobjetDetecte" + id + ".png";
    ecritureDonneesImagesOpenCVdansUnFichierPNG(imageEncours, n, dossierDestinationImage);

    //Ajout du bean dans la liste des bean
    listImagesObjetsTousLesDossiersTisirImage.put(nomFichier, imageobjet);

}

From source file:tk.year.opencv.demo.filters.Contrast.java

License:Open Source License

@Override
public Mat filter(final Mat src) {

    final Mat dst = new Mat(src.rows(), src.cols(), src.type());
    src.convertTo(dst, -1, 10d * value / 100, 0);
    return dst;/* w w w .j  a v a  2 s .  c  o  m*/
}

From source file:tk.year.opencv.demo.filters.Dilate.java

License:Open Source License

@Override
public Mat filter(final Mat src) {

    final Mat dst = new Mat(src.cols(), src.rows(), CvType.CV_8UC3);
    src.copyTo(dst);/*from   w w w. j  a  va2 s  .  c om*/

    Imgproc.dilate(dst, dst, structuringElement);

    return dst;
}

From source file:tk.year.opencv.demo.filters.Erode.java

License:Open Source License

@Override
public Mat filter(final Mat src) {

    final Mat dst = new Mat(src.cols(), src.rows(), CvType.CV_8UC3);
    src.copyTo(dst);//from w ww.j  a v  a2 s .  co  m

    Imgproc.erode(dst, dst, structuringElement);

    return dst;
}