List of usage examples for org.opencv.core Mat size
public Size size()
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 }// w w w .j av a 2 s . co 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); //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 comparaisonContours() { Set<String> clesContoursObjetsImageCapturee = listContoursObjetsImageCapturee.keySet(); if (clesContoursObjetsImageCapturee.size() > 0) { System.out.println();/*w ww . j a v a2s. c om*/ System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-"); double similariteMin = (double) 200; for (String cleContourImgCap : clesContoursObjetsImageCapturee) { System.out.println("\t -------------------------------------------"); //System.out.println("cleContourImgCap : " + cleContourImgCap ); //double similariteMin = (double)200; Mat matriceContoursObjetsImageCapturee = listContoursObjetsImageCapturee.get(cleContourImgCap); if (matriceContoursObjetsImageCapturee.size().width > 0 && matriceContoursObjetsImageCapturee.size().height > 0) { /*System.out.println("\t Taille de la matrice : " + matriceContoursObjetsImageCapturee.size().width +" X " + matriceContoursObjetsImageCapturee.size().height); System.out.println("\t Aire du contours : " + Imgproc.contourArea(matriceContoursObjetsImageCapturee)); System.out.println();*/ Set<String> clesContoursObjetsDossierTisirImage = listContoursObjetsDossierTisirImage.keySet(); if (clesContoursObjetsDossierTisirImage.size() > 0) { for (String cleContourImgDosTisir : clesContoursObjetsDossierTisirImage) { System.out.println("cleContourImgCap : " + cleContourImgCap); System.out.println( "\t Taille de la matrice : " + matriceContoursObjetsImageCapturee.size().width + " X " + matriceContoursObjetsImageCapturee.size().height); System.out.println("\t Aire du contours : " + Imgproc.contourArea(matriceContoursObjetsImageCapturee)); System.out.println("---"); System.out.println("cleContourImgDosTisir : " + cleContourImgDosTisir); Mat matriceContoursObjetsDossierTisirImage = listContoursObjetsDossierTisirImage .get(cleContourImgDosTisir); if (matriceContoursObjetsDossierTisirImage.size().width > 0 && matriceContoursObjetsDossierTisirImage.size().height > 0) { System.out.println("\t Taille de la matrice : " + matriceContoursObjetsImageCapturee.size().width + " X " + matriceContoursObjetsImageCapturee.size().height); System.out.println("\t Aire du contours : " + Imgproc.contourArea(matriceContoursObjetsDossierTisirImage)); //On cherche la similarit entre contoursObjetsImageCapturee et contoursObjetsDossierTisirImage double similariteDe2Matrices = Imgproc.matchShapes( matriceContoursObjetsImageCapturee, matriceContoursObjetsDossierTisirImage, Imgproc.CV_CONTOURS_MATCH_I3, 0); if (similariteMin > similariteDe2Matrices) { similariteMin = similariteDe2Matrices; } System.out.println("\t Similarit des matrices : " + cleContourImgCap + " et " + cleContourImgCap + " : \n\t" + similariteDe2Matrices); System.out.println("\t Similarit minimale : " + similariteMin); System.out.println("\t ----------------"); System.out.println(); } } } } } if (similariteMin <= 0.1) { resultat = "L'objet sur l'image capture est <br /> <em>RECYCLABLE</em> <br />"; } else { resultat = "L'objet sur l'image capture est <br /> <em>NON RECYCLABLE</em> <br />"; } } }
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 . j av a 2 s. co 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:uk.ac.horizon.artcodes.process.OtsuThresholder.java
License:Open Source License
@Override public void process(ImageBuffers buffers) { Mat image = buffers.getImageInGrey(); Imgproc.GaussianBlur(image, image, new Size(5, 5), 0); if (display == Display.greyscale) { Imgproc.cvtColor(image, buffers.getOverlay(false), Imgproc.COLOR_GRAY2BGRA); }//from ww w .ja v a 2 s . c o m tiles = 1; final int tileHeight = (int) image.size().height / tiles; final int tileWidth = (int) image.size().width / tiles; // Split image into tiles and apply process on each image tile separately. for (int tileRow = 0; tileRow < tiles; tileRow++) { final int startRow = tileRow * tileHeight; int endRow; if (tileRow < tiles - 1) { endRow = (tileRow + 1) * tileHeight; } else { endRow = (int) image.size().height; } for (int tileCol = 0; tileCol < tiles; tileCol++) { final int startCol = tileCol * tileWidth; int endCol; if (tileCol < tiles - 1) { endCol = (tileCol + 1) * tileWidth; } else { endCol = (int) image.size().width; } final Mat tileMat = image.submat(startRow, endRow, startCol, endCol); Imgproc.threshold(tileMat, tileMat, 127, 255, Imgproc.THRESH_OTSU); tileMat.release(); } } if (display == Display.threshold) { Imgproc.cvtColor(image, buffers.getOverlay(false), Imgproc.COLOR_GRAY2BGRA); } buffers.setImage(image); }
From source file:uk.ac.horizon.artcodes.process.TileThresholder.java
License:Open Source License
@Override public void process(ImageBuffers buffers) { Mat image = buffers.getImageInGrey(); Imgproc.GaussianBlur(image, image, new Size(5, 5), 0); if (display == Display.greyscale) { Imgproc.cvtColor(image, buffers.getOverlay(false), Imgproc.COLOR_GRAY2BGRA); }/*w w w .ja va 2s . com*/ if (!buffers.hasDetected()) { tiles = (tiles % 9) + 1; } final int tileHeight = (int) image.size().height / tiles; final int tileWidth = (int) image.size().width / tiles; // Split image into tiles and apply process on each image tile separately. for (int tileRow = 0; tileRow < tiles; tileRow++) { final int startRow = tileRow * tileHeight; int endRow; if (tileRow < tiles - 1) { endRow = (tileRow + 1) * tileHeight; } else { endRow = (int) image.size().height; } for (int tileCol = 0; tileCol < tiles; tileCol++) { final int startCol = tileCol * tileWidth; int endCol; if (tileCol < tiles - 1) { endCol = (tileCol + 1) * tileWidth; } else { endCol = (int) image.size().width; } final Mat tileMat = image.submat(startRow, endRow, startCol, endCol); Imgproc.threshold(tileMat, tileMat, 127, 255, Imgproc.THRESH_OTSU); tileMat.release(); } } if (display == Display.threshold) { Imgproc.cvtColor(image, buffers.getOverlay(false), Imgproc.COLOR_GRAY2BGRA); } buffers.setImage(image); }
From source file:xored.vpn.fixer.TokenDetector.java
private Mat threshold(Mat image, int blockSize, double c) { Mat imageHSV = new Mat(image.size(), Core.DEPTH_MASK_8U); Mat imageBlurr = new Mat(image.size(), Core.DEPTH_MASK_8U); Mat imageA = new Mat(image.size(), Core.DEPTH_MASK_ALL); Imgproc.cvtColor(image, imageHSV, Imgproc.COLOR_BGR2GRAY); Imgproc.GaussianBlur(imageHSV, imageBlurr, new Size(11, 11), 0); Imgproc.adaptiveThreshold(imageBlurr, imageA, 255, Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C, Imgproc.THRESH_BINARY, blockSize, c); return imageA; }