Example usage for org.opencv.core Core inRange

List of usage examples for org.opencv.core Core inRange

Introduction

In this page you can find the example usage for org.opencv.core Core inRange.

Prototype

public static void inRange(Mat src, Scalar lowerb, Scalar upperb, Mat dst) 

Source Link

Usage

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!"); 
        } */
    }
}