List of usage examples for org.opencv.core Mat cols
public int cols()
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; }