List of usage examples for org.opencv.core Core inRange
public static void inRange(Mat src, Scalar lowerb, Scalar upperb, Mat dst)
From source file:org.usfirst.frc.team2084.CMonster2016.vision.BoulderProcessor.java
License:Open Source License
@Override public void backgroundProcess(Mat cameraImage) { Imgproc.cvtColor(cameraImage, hsvImage, Imgproc.COLOR_BGR2HSV); // Threshold image to find blue/green Core.inRange(hsvImage, VisionParameters.getBoulderMinThreshold(), VisionParameters.getBoulderMaxThreshold(), thresholdImage);//from w w w. j a v a2s . c o m Imgproc.erode(thresholdImage, thresholdImage, KERNEL); Imgproc.dilate(thresholdImage, thresholdImage, KERNEL); thresholdImage.copyTo(contourImage); contours.clear(); hulls.clear(); Imgproc.findContours(contourImage, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE); Imgproc.drawContours(cameraImage, contours, -1, CONTOUR_COLOR); for (int i = 0; i < contours.size(); i++) { MatOfPoint contour = contours.get(i); hulls.add(convexHull(contour)); } Imgproc.drawContours(cameraImage, hulls, -1, CONTOUR_COLOR); debugImage("Boulder Threshold", thresholdImage); }
From source file:org.usfirst.frc.team2084.CMonster2016.vision.HighGoalProcessor.java
License:Open Source License
private Mat threshold(Mat image) { Core.inRange(image, VisionParameters.getGoalMinThreshold(), VisionParameters.getGoalMaxThreshold(), thresholdImage); return thresholdImage; }
From source file:org.vinesrobotics.bot.utils.opencv.ColorBlobDetector.java
License:Open Source License
public void process(Mat rgbaImage) { Imgproc.pyrDown(rgbaImage, mPyrDownMat); Imgproc.pyrDown(mPyrDownMat, mPyrDownMat); Imgproc.cvtColor(mPyrDownMat, mHsvMat, Imgproc.COLOR_RGB2HSV_FULL); Core.inRange(mHsvMat, mLowerBound, mUpperBound, mMask); Imgproc.dilate(mMask, mDilatedMask, new Mat()); List<MatOfPoint> contours = new ArrayList<MatOfPoint>(); Imgproc.findContours(mDilatedMask, contours, mHierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE); // Filter contours by area and resize to fit the original image size double maxArea = 0; Iterator<MatOfPoint> each = contours.iterator(); while (each.hasNext()) { MatOfPoint wrapper = each.next(); double area = Imgproc.contourArea(wrapper); if (area > maxArea) maxArea = area;/*from w w w .j a v a 2s .c o m*/ } mContours.clear(); each = contours.iterator(); while (each.hasNext()) { MatOfPoint contour = each.next(); if (Imgproc.contourArea(contour) > mMinContourArea * maxArea) { Core.multiply(contour, new Scalar(4, 4), contour); mContours.add(contour); } } Imgproc.drawContours(rgbaImage, mContours, -1, mBaseColor); each = mContours.iterator(); ArrayList<Point> centers = new ArrayList<>(); while (each.hasNext()) { MatOfPoint wrapper = each.next(); Moments moments = Imgproc.moments(wrapper); centers.add(new Point(moments.m10 / moments.m00, moments.m01 / moments.m00)); } colorCenterPoints = centers; Point avg = new Point(0, 0); for (Point p : centers) avg.set(new double[] { avg.x + p.x, avg.y + p.y }); avg.set(new double[] { avg.x / centers.size(), avg.y / centers.size() }); centerOfAll = avg; }
From source file:processdata.ExperimentalDataProcessingUI.java
private void jButtonProcessImageActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonProcessImageActionPerformed try {//from ww w . j a va2 s.c om // TODO add your handling code here: //load library System.loadLibrary(Core.NATIVE_LIBRARY_NAME); // TODO add your handling code here: folderName = textField2.getText(); int currentFrameIndex = Integer.parseInt(initialFrameIndexBox.getText()) - 1; datasetIndex = Integer.parseInt(textField1.getText()); String videoImageFileName = "./videoFrames//" + folderName + "//" + "frame_outVideo_" + currentFrameIndex + ".jpg"; String depthFrameFileName = initialImagePath + datasetIndex + "//" + folderName + "//" + "depthData//" + "outDepthByte_" + currentFrameIndex; rgbFrame = Highgui.imread(videoImageFileName, Highgui.CV_LOAD_IMAGE_GRAYSCALE); depthFrame = depthDataProcessingUtilities.processDepthDataFile(depthFrameFileName, jSlider2.getValue(), jSlider1.getValue()); Mat[] backgroundFrames = readBackground(); rgbBackgroundFrame = backgroundFrames[0]; depthBackgroundFrame = backgroundFrames[1]; //subtract depth background Mat depthFrameBackgroundSubtracted = new Mat(); Core.subtract(depthBackgroundFrame, depthFrame, depthFrameBackgroundSubtracted); Imgproc.threshold(depthFrameBackgroundSubtracted, depthFrameBackgroundSubtracted, 0, 255, Imgproc.THRESH_BINARY); displayImage(Mat2BufferedImage( videoProcessingUtilities.resizeImage(depthFrameBackgroundSubtracted, new Size(448, 234))), depthBckgSubtractedFrames); //remove the red-colored elements from depth image and leave only blue ones Mat depthImageCleaned = new Mat(); Core.inRange(depthFrameBackgroundSubtracted, new Scalar(253, 0, 0), new Scalar(255, 0, 0), depthImageCleaned); //apply morphologic opening to remove noise Imgproc.morphologyEx(depthImageCleaned, depthImageCleaned, 2, Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3, 3))); displayImage( Mat2BufferedImage(videoProcessingUtilities.resizeImage(depthImageCleaned, new Size(448, 234))), depthCleanedFramesPanel); //apply the homographic transform to cleaned depth image Mat hDepthImageCleaned = videoProcessingUtilities.performHomographyTransformation(depthImageCleaned, new Size(1920, 1080)); //extract all contours //sort all extracted contours and choose top 2 //overlay top 2 contours on the image and fill them with white color //mask the rgb frame // do all necessary rotation operations //offer user to save the image //extract all suitable contours between MIN and MAX areas: MatOfPoint[] contours = videoProcessingUtilities.extractLargestContours(hDepthImageCleaned, 100000, 160000); System.out.println("Number of contorus extracted " + contours.length); //draw contours List<MatOfPoint> tempContours = new ArrayList<MatOfPoint>(); Mat hDepthImageCleanedContours = hDepthImageCleaned.clone(); for (MatOfPoint cnt : contours) { System.out.println("Extracted Contour Area is " + Imgproc.contourArea(cnt)); tempContours.add(cnt); } Imgproc.cvtColor(hDepthImageCleanedContours, hDepthImageCleanedContours, Imgproc.COLOR_GRAY2BGR); Imgproc.drawContours(hDepthImageCleanedContours, tempContours, -1, new Scalar(0, 0, 255), 5); displayImage( Mat2BufferedImage( videoProcessingUtilities.resizeImage(hDepthImageCleanedContours, new Size(448, 234))), extractedContoursPanel); //prepare final mask Mat hDepthImageFilledContours = new Mat(hDepthImageCleaned.rows(), hDepthImageCleaned.cols(), hDepthImageCleaned.type()); Imgproc.drawContours(hDepthImageFilledContours, tempContours, -1, new Scalar(255, 255, 255), -1); displayImage( Mat2BufferedImage( videoProcessingUtilities.resizeImage(hDepthImageFilledContours, new Size(448, 234))), maskedContoursPanel); //subtract video background // Mat rgbFrameBackgroundSubtracted = new Mat(); // Core.subtract(rgbBackgroundFrame,rgbFrame, rgbFrameBackgroundSubtracted, hDepthImageCleaned); // displayImage(Mat2BufferedImage(videoProcessingUtilities.resizeImage(rgbFrameBackgroundSubtracted, new Size(448,234))),videoBckgSubtractedFrames); // //mask Mat preMaskedRGBFrame = new Mat(); rgbFrame.copyTo(preMaskedRGBFrame, hDepthImageCleaned); displayImage( Mat2BufferedImage(videoProcessingUtilities.resizeImage(preMaskedRGBFrame, new Size(448, 234))), videoBckgSubtractedFrames); //postmask Mat betterMaskedRGBFrame = new Mat(); rgbFrame.copyTo(betterMaskedRGBFrame, hDepthImageFilledContours); displayImage( Mat2BufferedImage( videoProcessingUtilities.resizeImage(betterMaskedRGBFrame, new Size(448, 234))), videoMaskedPanel); //clear ArrayList containig all processed images finalImages.clear(); javax.swing.JLabel[] jLabArray = { extractedShoePanel1, extractedShoePanel2 }; //segment all images int panelIdx = 0; for (MatOfPoint contour : tempContours) { MatOfPoint2f newMatOfPoint2fContour = new MatOfPoint2f(contour.toArray()); RotatedRect finalROI = Imgproc.minAreaRect(newMatOfPoint2fContour); Mat newMask = videoProcessingUtilities.getContourMasked(hDepthImageFilledContours.clone(), contour); Mat imageROIRegistred = new Mat(); betterMaskedRGBFrame.copyTo(imageROIRegistred, newMask); Mat maskedRGBFrameROI = videoProcessingUtilities.rotateExtractedShoeprint(imageROIRegistred, finalROI, new Size(500, 750), 2); finalImages.add(maskedRGBFrameROI); displayImage( Mat2BufferedImage( videoProcessingUtilities.resizeImage(maskedRGBFrameROI, new Size(203, 250))), jLabArray[panelIdx]); panelIdx++; } //MatOfInt parameters = new MatOfInt(); //parameters.fromArray(Highgui.CV_IMWRITE_JPEG_QUALITY, 100); //Highgui.imwrite(".//backgrounds//"+"test.jpg", depthFrameBackgroundSubtracted, parameters); } catch (FileNotFoundException ex) { Logger.getLogger(ExperimentalDataProcessingUI.class.getName()).log(Level.SEVERE, null, ex); } }
From source file:samples.GripPipeline.java
License:Open Source License
/** * Segment an image based on hue, saturation, and luminance ranges. * * @param input The image on which to perform the HSL threshold. * @param hue The min and max hue/*from w ww . j a v a2s . co m*/ * @param sat The min and max saturation * @param lum The min and max luminance * @param out The image in which to store the output. */ private void hslThreshold(Mat input, double[] hue, double[] sat, double[] lum, Mat out) { Imgproc.cvtColor(input, out, Imgproc.COLOR_BGR2HLS); Core.inRange(out, new Scalar(hue[0], lum[0], sat[0]), new Scalar(hue[1], lum[1], sat[1]), out); }
From source file:servershootingstar.BallDetector.java
public static String getAngleFromRobot(int input) { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); System.out.println("before"); int point;//from w w w . j a v a 2 s . co m try { Mat frame = new Mat(); System.out.println("AAAAAA"); Mat originalFrame = new Mat(); System.out.println("BBBBBB"); VideoCapture videoCapture = new VideoCapture(0); System.out.println("CCCCCCCC"); videoCapture.read(originalFrame); // System.out.println("original" + originalFrame.dump()); // initSwing(originalFrame); int workaround = 20; while (workaround > 0) { System.out.println("workaround " + workaround); videoCapture.read(originalFrame); // System.out.println(originalFrame.dump() + originalFrame.dump().length()); workaround--; } // Imgcodecs.imwrite("C:\\Users\\Goran\\Desktop\\Goran.jpg", originalFrame); Mat cropped = originalFrame.submat(originalFrame.rows() / 4, originalFrame.rows() / 4 * 3, 0, originalFrame.cols()); initSwing(cropped); Imgproc.cvtColor(cropped, frame, Imgproc.COLOR_BGR2HSV); // insert lower and upper bounds for colors Scalar greenLowerB = new Scalar(20, 55, 55); Scalar greenUpperB = new Scalar(40, 255, 255); Scalar redLowerB = new Scalar(160, 100, 35); Scalar red1LowerB = new Scalar(0, 100, 35); Scalar redUpperB = new Scalar(180, 255, 255); Scalar red1UpperB = new Scalar(20, 255, 255); Scalar blueLowerB = new Scalar(100, 100, 35); Scalar blueUpperB = new Scalar(120, 255, 155); Mat mask = new Mat(); if (input == 1) { Mat otherMask = new Mat(); Core.inRange(frame, redLowerB, redUpperB, mask); Core.inRange(frame, red1LowerB, red1UpperB, otherMask); Core.bitwise_or(mask, otherMask, mask); } else if (input == 2) { Core.inRange(frame, greenLowerB, greenUpperB, mask); } else { Core.inRange(frame, blueLowerB, blueUpperB, mask); } Imgproc.erode(mask, mask, Imgproc.getStructuringElement(Imgproc.CV_SHAPE_ELLIPSE, new Size(5, 5))); Imgproc.erode(mask, mask, Imgproc.getStructuringElement(Imgproc.CV_SHAPE_ELLIPSE, new Size(5, 5))); Imgproc.erode(mask, mask, Imgproc.getStructuringElement(Imgproc.CV_SHAPE_ELLIPSE, new Size(5, 5))); Imgproc.erode(mask, mask, Imgproc.getStructuringElement(Imgproc.CV_SHAPE_ELLIPSE, new Size(5, 5))); int minX = Integer.MAX_VALUE, maxX = Integer.MIN_VALUE, minY = Integer.MAX_VALUE, maxY = Integer.MIN_VALUE; for (int i = 0; i < mask.rows(); ++i) { for (int j = 0; j < mask.cols(); ++j) { double value = mask.get(i, j)[0]; //System.out.println(value); if (value > 1) { minX = Math.min(minX, i); maxX = Math.max(maxX, i); minY = Math.min(minY, j); maxY = Math.max(maxY, j); } } } Imgproc.circle(mask, new Point((maxY + minY) / 2, (minX + maxX) / 2), 3, new Scalar(0, 0, 0)); initSwing(mask); point = (minY + maxY) / 2; point = point - 320; cos = point / 320.0; System.out.println("OK"); } catch (Exception ex) { point = (new Random()).nextInt(640); cos = -1; System.out.println("error imase, davam random brojka: " + point); ex.printStackTrace(); } // System.out.println(); // System.out.println("tockata u granica od [-320, 320]"); // System.out.println(point); // System.out.println("cosinus vrednost"); // System.out.println(cos); // System.out.println(); System.out.println("cos = " + cos); if (cos == -1) { return "-1"; } int res = (int) (2 * Math.toDegrees(Math.acos(cos)) / 3); System.out.println("Res: " + res); return String.valueOf(res); }
From source file:team492.GripPipeline.java
License:Open Source License
/** * Segment an image based on hue, saturation, and value ranges. * * @param input// ww w .j ava2 s .c o m * The image on which to perform the HSL threshold. * @param hue * The min and max hue * @param sat * The min and max saturation * @param val * The min and max value * @param output * The image in which to store the output. */ private void hsvThreshold(Mat input, double[] hue, double[] sat, double[] val, Mat out) { Imgproc.cvtColor(input, out, Imgproc.COLOR_BGR2HSV); Core.inRange(out, new Scalar(hue[0], sat[0], val[0]), new Scalar(hue[1], sat[1], val[1]), out); }
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 w w w.j ava 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 w w.j a v a2s . c om //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:udp.server.ObjectTracker.java
private void trackColors() { while (true) { //capture.read(webcam_image); //System.out.println(this.camCap.getFrame().size()); webcam_image = this.camCap.getFrame().clone(); if (!webcam_image.empty()) { //Adjusting brightness and contrast webcam_image.convertTo(webcam_image, -1, brightness, contrast); //Adding blur to remove noise Imgproc.blur(webcam_image, webcam_image, new Size(7, 7)); // converting to HSV image Imgproc.cvtColor(webcam_image, hsv_image, Imgproc.COLOR_BGR2HSV); //Checking if the hsv image is in range. Core.inRange(hsv_image, hsv_min, hsv_max, thresholded); Imgproc.erode(thresholded, thresholded, Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(8, 8))); Imgproc.dilate(thresholded, thresholded, Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(8, 8))); Core.split(hsv_image, lhsv); // We get 3 2D one channel Mats Mat S = lhsv.get(1);// w ww. java2 s . co m Mat V = lhsv.get(2); Core.subtract(array255, S, S); Core.subtract(array255, V, V); S.convertTo(S, CvType.CV_32F); V.convertTo(V, CvType.CV_32F); Core.magnitude(S, V, distance); Core.inRange(distance, new Scalar(0.0), new Scalar(200.0), thresholded2); Imgproc.GaussianBlur(thresholded, thresholded, new Size(9, 9), 0, 0); Imgproc.HoughCircles(thresholded, circles, Imgproc.CV_HOUGH_GRADIENT, 2, thresholded.height() / 8, 200, 100, 0, 0); Imgproc.findContours(thresholded, contours, thresholded2, Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE); //------Imgproc.drawContours(webcam_image, contours, -1, new Scalar(255, 0, 0), 2); //------Core.circle(webcam_image, new Point(210,210), 10, new Scalar(100,10,10),3); data = webcam_image.get(210, 210); //------Core.putText(webcam_image,String.format("("+String.valueOf(data[0])+","+String.valueOf(data[1])+","+String.valueOf(data[2])+")"),new Point(30, 30) , 3 //FONT_HERSHEY_SCRIPT_SIMPLEX //------ ,1.0,new Scalar(100,10,10,255),3); //ArrayList<Float> errorAngles = new ArrayList<>(); ArrayList<Float> errorAngles = getTargetError(); if (errorAngles != null) { try { semaphore.acquire(); } catch (InterruptedException ex) { Logger.getLogger(ObjectTracker.class.getName()).log(Level.SEVERE, null, ex); } float eXa = (errorAngles.get(0)); float eYa = (errorAngles.get(1)); this.dh.setPixyXvalue(eXa); this.dh.setPixyYvalue(eYa); //System.out.print("AngleErrorX: "+errorAngles.get(0)); //System.out.println(" AngleErrorY: "+ errorAngles.get(1)); semaphore.release(); } } /*else { System.out.println(" --(!) No captured frame -- Break!"); } */ } }