Example usage for org.opencv.imgproc Imgproc bilateralFilter

List of usage examples for org.opencv.imgproc Imgproc bilateralFilter

Introduction

In this page you can find the example usage for org.opencv.imgproc Imgproc bilateralFilter.

Prototype

public static void bilateralFilter(Mat src, Mat dst, int d, double sigmaColor, double sigmaSpace) 

Source Link

Usage

From source file:ImageReade.java

public static void main(String[] args) {

    // Load an image file and display it in a window.
    Mat m1 = Highgui.imread("H:\\error1.jpg");
    imshow("Original", m1);

    // Do some image processing on the image and display in another window.
    Mat m2 = new Mat();
    Imgproc.bilateralFilter(m1, m2, -1, 50, 10);
    Imgproc.Canny(m2, m2, 10, 200);//from  w  w w.jav a  2s . c o m
    imshow("Edge Detected", m2);
    detectLetter(m1);

}

From source file:ThirdTry.java

public static void main(String[] args) {

    // Load an image file and display it in a window.
    Mat m1 = Highgui.imread("H:\\error35.jpg");
    //imshow("Original", m1);

    // Do some image processing on the image and display in another window.
    Mat m2 = new Mat();
    Imgproc.bilateralFilter(m1, m2, -1, 50, 10);
    Imgproc.Canny(m2, m2, 10, 200);// ww  w  . ja v a  2 s.  co m
    imshow("Edge Detected", m2);
    detectLetter(m1, m2);

}

From source file:edu.sust.cse.analysis.image.ImageReader.java

public static void main(String[] args) {

    // Load an image file and display it in a window.
    Mat m1 = Highgui.imread("C:\\Users\\Eaiman\\Downloads\\test2\\Thesis\\test5.jpg");
    imshow("Original", m1);

    // Do some image processing on the image and display in another window.
    Mat m2 = new Mat();
    Imgproc.bilateralFilter(m1, m2, -1, 50, 10);
    Imgproc.Canny(m2, m2, 10, 200);/* w w w .j ava  2 s .  c  o m*/
    imshow("Edge Detected", m2);
    detectLetter(m1);

}

From source file:edu.sust.cse.analysis.image.ThirdTry.java

public static void main(String[] args) {

    // Load an image file and display it in a window.
    Mat m1 = Highgui.imread("C:\\Users\\Eaiman\\Downloads\\test2\\Thesis\\test5.jpg");
    //imshow("Original", m1);

    // Do some image processing on the image and display in another window.
    Mat m2 = new Mat();
    Imgproc.bilateralFilter(m1, m2, -1, 50, 10);
    Imgproc.Canny(m2, m2, 10, 200);//from ww w.  j a v  a 2  s  . com
    imshow("Edge Detected", m2);
    detectLetter(m1, m2);

}

From source file:edu.sust.cse.analysis.news.NewsAnalysis.java

public static void main(String[] args) throws IOException {

    //                Mat inputImageMat = Highgui.imread("D:\\OpenCV_Library\\resources\\Scan_Img\\image\\data1\\e-01.jpg");
    //                Mat inputImageMat = Highgui.imread("D:\\OpenCV_Library\\resources\\Scan_Img\\image\\data1\\e-01-145.jpg");
    //                Mat inputImageMat = Highgui.imread("D:\\OpenCV_Library\\resources\\Scan_Img\\image\\data1\\e-02.jpg");
    //                Mat inputImageMat = Highgui.imread("D:\\OpenCV_Library\\resources\\Scan_Img\\image\\data1\\e-03.jpg");
    //                Mat inputImageMat = Highgui.imread("D:\\OpenCV_Library\\resources\\Scan_Img\\image\\data1\\e-04.jpg");
    //                Mat inputImageMat = Highgui.imread("D:\\OpenCV_Library\\resources\\Scan_Img\\image\\data1\\e-05.jpg");
    //                 Mat inputImageMat = Highgui.imread("D:\\OpenCV_Library\\resources\\Scan_Img\\image\\data1\\sc-01.jpg");
    //        Mat inputImageMat = Highgui.imread("D:\\OpenCV_Library\\resources\\Scan_Img\\image\\data1\\sc-04_resized.jpg");
    //        Mat inputImageMat = Highgui.imread("D:\\Google\\Thesis Work\\Camscanner Output\\normal_output_scan0007.jpg");
    //        Mat inputImageMat = Highgui.imread("D:\\Google\\Thesis Work\\Camscanner Output\\normal_output_scan0007-01.jpg");
    //        Mat inputImageMat = Highgui.imread("D:\\Google\\Thesis Work\\Camscanner Output\\normal_output_scan0001-01.bmp");
    //        Mat inputImageMat = Highgui.imread("D:\\Google\\Thesis Work\\scan-01-dec\\scan0007-300.jpg");
    //        Mat inputImageMat = Highgui.imread("D:\\Google\\Thesis Work\\scan-01-dec\\scan0007-145.jpg");
    //        Mat inputImageMat = Highgui.imread("D:\\Google\\Thesis Work\\scan-01-dec\\scan0007-145.jpg");
    //        Mat inputImageMat = Highgui.imread("D:\\Google\\Thesis Work\\scan-01-dec\\scan0007-96.jpg");
    //        Mat inputImageMat = Highgui.imread("D:\\Google\\Thesis Work\\scan-01-dec\\scan0001-145.jpg");
    //        Mat inputImageMat = Highgui.imread("D:\\Thesis-4-1\\Previous Work\\OPenCv2\\eProthomAlo Sample I-O\\e-5-12.jpg");
    //        Mat inputImageMat = Highgui.imread("D:\\Thesis-4-1\\Previous Work\\OPenCv2\\eProthomAlo Sample I-O\\e-6-12.jpg");
    //        Mat inputImageMat = Highgui.imread("D:\\OpenCV_Library\\resources\\Scan_Img\\image\\06-12-2015\\sc-03-145.jpg");
    //        Mat inputImageMat = Highgui.imread("D:\\OpenCV_Library\\resources\\Scan_Img\\image\\06-12-2015\\sc-03-145.jpg");
    //        Mat inputImageMat = Highgui.imread("D:\\OpenCV_Library\\resources\\Scan_Img\\image\\06-12-2015\\sc-03-300B.jpg");
    Mat inputImageMat = Highgui//from  ww w  . j  a va 2 s.  c o  m
            .imread("D:\\OpenCV_Library\\resources\\Scan_Img\\image\\06-12-2015\\sc-03-145B.jpg");
    if (null == inputImageMat) {
        System.out.println("[INPUT IMAGE NULL]");
    }
    Mat image = new Mat();//normal_output_scan0002.jpg
    double ratio = 150 / 72.0; // 4.167
    System.out.println("WIDTH: " + inputImageMat.width() + " HEIGHT:" + inputImageMat.height());
    int inputWidth = (int) (inputImageMat.width() * ratio);
    int inputHeight = (int) (inputImageMat.height() * ratio);
    System.out.println("WIDTH: " + inputWidth + " HEIGHT:" + inputHeight);

    //        inputImageMat = image;
    //        Mat inputImageMat = Highgui.imread("D:\\OpenCV_Library\\resources\\Scan_Img\\image\\data1\\sc-02.jpg");
    //        Mat inputImageMat = Highgui.imread("D:\\OpenCV_Library\\resources\\Scan_Img\\image\\data1\\sc-03.jpg");
    //        Mat inputImageMat = Highgui.imread("D:\\OpenCV_Library\\resources\\Scan_Img\\image\\data1\\sc-04.jpg");
    //        Mat inputImageMat = Highgui.imread("D:\\OpenCV_Library\\resources\\Scan_Img\\image\\data1\\sc-05.jpg");
    //        Mat inputImageMat = Highgui.imread("D:\\OpenCV_Library\\resources\\Scan_Img\\image\\web001.png");
    Debug.debugLog("[Image [Cols, Rows]: [" + inputImageMat.cols() + ", " + inputImageMat.rows() + "]]");
    //        imshow("Original", inputImageMat);
    ViewerUI.show("Original", inputImageMat, ViewableUI.SHOW_ORIGINAL);
    //        ViewerUI.show("Original-Histogram", Histogram.getHistogram(inputImageMat), ViewableUI.SHOW_HISTOGRAM_ORIGINAL);

    // Do some image processing on the image and display in another window.
    Mat filteredImage = new Mat();
    /**
     * We have explained some filters which main goal is to smooth an input
     * image. However, sometimes the filters do not only dissolve the noise,
     * but also smooth away the edges
     */
    //        Imgproc.bilateralFilter(inputImageMat, m2, -1, 50, 10); /*Previous line for noise filtering*/
    Imgproc.bilateralFilter(inputImageMat, filteredImage, -1, 50, 10);
    //        Imgproc.bilateralFilter(inputImageMat, filteredImage, -1, 150, 11);

    ViewerUI.show("Noise Filter", filteredImage, ViewableUI.SHOW_NOISE_FILTER);
    //        ViewerUI.show("Noise Filter-Histogram", Histogram.getHistogram(filteredImage), ViewableUI.SHOW_HISTOGRAM_NOISE_FILTER);
    Imgproc.Canny(filteredImage, filteredImage, 10, 150);
    //        Imgproc.bilateralFilter(filteredImage, filteredImage, -1, 50, 10);
    //        Imgproc.threshold(filteredImage, filteredImage, 250, 300,Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C );
    //Imgproc.cvtColor(m1, m1, Imgproc.COLOR_RGB2GRAY, 0);
    //        imshow("Edge Detected", m2);
    ViewerUI.show("Edge Detected", filteredImage, ViewableUI.SHOW_EDGE_DETECTION);
    //        ViewerUI.show("Edge Detected-Histogram", Histogram.getHistogram(filteredImage), ViewableUI.SHOW_HISTOGRAM_EDGE_DETECTION);

    Size sizeA = filteredImage.size();
    System.out.println("Width: " + sizeA.width + " Height: " + sizeA.height);
    int width = (int) sizeA.width;
    int height = (int) sizeA.height;
    int pointLength[][][] = new int[height][width][2];
    for (int i = 0; i < height; i++) {
        for (int j = 0; j < width; j++) {
            //double[] data = m2.get(i, j);
            if (filteredImage.get(i, j)[0] != 0) {
                pointLength[i][j][0] = 0;
                pointLength[i][j][1] = 0;
                continue;
            }
            if (j != 0 && filteredImage.get(i, j - 1)[0] == 0) {
                pointLength[i][j][0] = pointLength[i][j - 1][0];
            } else {
                int count = 0;
                for (int k = j + 1; k < width; k++) {
                    if (filteredImage.get(i, k)[0] == 0) {
                        count++;
                    } else {
                        break;
                    }
                }
                pointLength[i][j][0] = count;
            }
            if (i != 0 && filteredImage.get(i - 1, j)[0] == 0) {
                pointLength[i][j][1] = pointLength[i - 1][j][1];
            } else {
                int count = 0;
                for (int k = i + 1; k < height; k++) {
                    if (filteredImage.get(k, j)[0] == 0) {
                        count++;
                    } else {
                        break;
                    }
                }
                pointLength[i][j][1] = count;
            }
        }
    }
    String temp = "";
    Mat convertArea = filteredImage.clone();

    int[][] blackWhite = new int[height][width];

    for (int i = 0; i < height; i++) {
        temp = "";
        for (int j = 0; j < width; j++) {
            if (i == 0 || j == 0 || i == height - 1 || j == width - 1) {
                temp = temp + "@";
                blackWhite[i][j] = 1;

                double[] data = filteredImage.get(i, j);
                data[0] = 255.0;
                convertArea.put(i, j, data);
            } else if (pointLength[i][j][0] > 150 && pointLength[i][j][1] > 6) {
                temp = temp + "@";
                blackWhite[i][j] = 1;

                double[] data = filteredImage.get(i, j);
                data[0] = 255.0;
                convertArea.put(i, j, data);
            } else if (pointLength[i][j][0] > 7 && pointLength[i][j][1] > 200) {
                temp = temp + "@";
                blackWhite[i][j] = 1;

                double[] data = filteredImage.get(i, j);
                data[0] = 255.0;
                convertArea.put(i, j, data);
            } else {
                temp = temp + " ";
                blackWhite[i][j] = 0;

                double[] data = filteredImage.get(i, j);
                data[0] = 0.0;
                convertArea.put(i, j, data);
            }

        }
    }
    ViewerUI.show("Convertion", convertArea, ViewableUI.SHOW_CONVERSION);
    //        ViewerUI.show("Convertion-Histogram", Histogram.getHistogram(convertArea), ViewableUI.SHOW_HISTOGRAM_CONVERSION);

    ImageDetection isImage = new ImageDetection();
    HeadlineDetection isHeadline = new HeadlineDetection();

    ImageBorderDetectionBFS imgBFS = new ImageBorderDetectionBFS();
    ArrayList<BorderItem> borderItems = imgBFS.getBorder(blackWhite, width, height, filteredImage,
            inputImageMat);
    // Mat[] subMat = new Mat[borderItems.size()];
    //        for (int i = 0; i < borderItems.size(); i++) {
    //            subMat[i] = m2.submat(borderItems.get(i).getMinX(), borderItems.get(i).getMaxX(),
    //                    borderItems.get(i).getMinY(), borderItems.get(i).getMaxY());
    //            if (isImage.isImage(subMat[i])) {
    //                System.out.println("subMat" + i + " is an image");
    //                imshow("Image" + i, subMat[i]);
    //
    //            }else if(isHeadline.isHeadLine(subMat[i])){
    //                System.out.println("subMat" + i + " is an Headline");
    //                imshow("Headline" + i, subMat[i]);
    //            }else{
    //                System.out.println("subMat" + i + " is an Column");
    //                imshow("Column" + i, subMat[i]);
    //            }
    //            //imshow("subMat" + i, subMat[i]);
    //            bw.close();
    //
    //        }

    boolean[] imageIndexer = new boolean[borderItems.size()];
    int[] lineHeight = new int[borderItems.size()];
    int highestLinheight = -1, lowestLineHeight = 10000;
    int totalHeight = 0, notImage = 0;

    for (int i = 0; i < borderItems.size(); i++) {
        lineHeight[i] = 0;
        BorderItem borderItem = borderItems.get(i);
        //            subMat[i] = m2.submat(borderItems.get(i).getMinX(), borderItems.get(i).getMaxX(),
        //                    borderItems.get(i).getMinY(), borderItems.get(i).getMaxY());
        //            if (isImage.isImage(subMat[i])) {
        //                System.out.println("subMat" + i + " is an image");
        //                imshow("Image" + i, subMat[i]);
        //                imageIndexer[i] = true;
        //                continue;
        //            }else{
        //                notImage++;
        //                imageIndexer[i] = false;
        //            }
        if (borderItem.getIsImage()) {
            System.out.println("subMat" + i + " is an image");
            //                imshow("Image" + i, borderItem.getBlock());
            ViewerUI.show("Image" + i, borderItem.getBlock(), ViewableUI.SHOW_IMAGE);
            //                ViewerUI.show("Image-Histogram" + i, Histogram.getHistogram(borderItem.getBlock()), ViewableUI.SHOW_HISTOGRAM_IMAGE);

            imageIndexer[i] = true;
            continue;
        } else {
            notImage++;
            imageIndexer[i] = false;
        }

        //            totalHeight += lineHeight[i] = getLineHeight(subMat[i]);
        Mat fake = new Mat();
        Imgproc.cvtColor(borderItem.getBlock(), fake, Imgproc.COLOR_RGB2GRAY, 0);
        totalHeight += lineHeight[i] = getLineHeight(fake);
        fake.release();
        System.out.println("line height " + i + ": " + lineHeight[i]);
        //            imshow("" + i, borderItems.get(i).getBlock());
        if (lineHeight[i] > highestLinheight) {
            highestLinheight = lineHeight[i];
        }
        if (lineHeight[i] < lowestLineHeight) {
            lowestLineHeight = lineHeight[i];
        }

        //            if(i==7)
        //                break;
    }

    int avgLineHeight = totalHeight / notImage;

    for (int i = 0; i < borderItems.size(); i++) {
        if (!imageIndexer[i]) {
            if (lineHeight[i] - lowestLineHeight > 13 && lineHeight[i] >= 45) {
                //                    imshow("Headline" + i, subMat[i]);
                //                    imshow("Headline" + i, borderItems.get(i).getBlock());
                ViewerUI.show("Headline" + i, borderItems.get(i).getBlock(), ViewableUI.SHOW_HEADING);
                //                    ViewerUI.show("Headline-Histogram" + i, Histogram.getHistogram(borderItems.get(i).getBlock()), ViewableUI.SHOW_HISTOGRAM_HEADING);

            } else if (lineHeight[i] - lowestLineHeight > 8 && lineHeight[i] >= 21 && lineHeight[i] < 45) {
                //                    imshow("Sub Headline" + i, borderItems.get(i).getBlock());
                ViewerUI.show("Sub Headline" + i, borderItems.get(i).getBlock(), ViewableUI.SHOW_SUB_HEADING);
                //                    ViewerUI.show("Sub Headline-Histogram" + i, Histogram.getHistogram(borderItems.get(i).getBlock()), ViewableUI.SHOW_HISTOGRAM_SUB_HEADING);

            } else {
                //                    imshow("Column" + i, subMat[i]);
                //                    imshow("Column" + i, borderItems.get(i).getBlock());
                ViewerUI.show("Column" + i, borderItems.get(i).getBlock(), ViewableUI.SHOW_COLUMN);
                //                    ViewerUI.show("Column-Histogram" + i, Histogram.getHistogram(borderItems.get(i).getBlock()), ViewableUI.SHOW_HISTOGRAM_COLUMN);

            }
        }
    }

}

From source file:info.jmfavreau.bifrostcore.imageprocessing.ImageToColor.java

License:Open Source License

private Mat smooth_image(Mat img) {
    Mat smoothed = img.clone();//  ww  w .  j a  v a 2  s .  c o m
    int diam = 20; // TODO: adjust this value depending of the image size
    int std_dev_color = 80; // TODO: fix these values
    int std_dev_space = 80;
    try {
        Imgproc.bilateralFilter(img, smoothed, diam, std_dev_color, std_dev_space);
    } catch (CvException e) {
        Log.e("bifrostcore", e.getMessage());
    }
    return smoothed;
}

From source file:LetsStart.GUI.java

private void processOperation() {
    if (noneString.equals(filterMode)) {
        output = image.clone();// w ww.jav  a  2 s. c o m
    } else {
        output = new Mat(image.rows(), image.cols(), image.type());
        Size size = new Size(10.0, 10.0);
        if (blurString.equals(filterMode)) {
            Imgproc.blur(image, output, size);
        } else if (gaussianString.equals(filterMode)) {
            //Imgproc.GaussianBlur(image, output, size, 0);

        } else if (medianString.equals(filterMode)) {
            Imgproc.medianBlur(image, output, 3);
        } else if (bilateralString.equals(filterMode)) {
            Imgproc.bilateralFilter(image, output, 9, 100, 100);
        }

    }

}

From source file:news_analysis.NewsAnalysis.java

public static void main(String[] args) throws IOException {
    file = new File("F:\\AbcFile\\filename.txt");
    if (!file.exists()) {
        file.createNewFile();/*from  w  ww .  java 2s. com*/
    }
    fw = new FileWriter(file.getAbsoluteFile());
    bw = new BufferedWriter(fw);
    bw.flush();
    // Load an image file and display it in a window.
    Mat m1 = Highgui.imread("E:\\Raw Java Project\\Thesis\\test6.jpg");
    //imshow("Original", m1);

    // Do some image processing on the image and display in another window.
    Mat m2 = new Mat();
    Imgproc.bilateralFilter(m1, m2, -1, 50, 10);
    Imgproc.Canny(m2, m2, 10, 200);
    imshow("Edge Detected", m2);
    Size sizeA = m2.size();
    System.out.println("width: " + sizeA.width + " Height: " + sizeA.height);
    int width = (int) sizeA.width;
    int hight = (int) sizeA.height;
    int pointLength[][][] = new int[hight][width][2];
    for (int i = 0; i < hight; i++) {
        for (int j = 0; j < width; j++) {
            double[] data = m2.get(i, j);
            if (m2.get(i, j)[0] != 0) {
                pointLength[i][j][0] = 0;
                pointLength[i][j][1] = 0;
                continue;
            }
            if (j != 0 && m2.get(i, j - 1)[0] == 0) {
                pointLength[i][j][0] = pointLength[i][j - 1][0];
            } else {
                int count = 0;
                for (int k = j + 1; k < width; k++) {
                    if (m2.get(i, k)[0] == 0) {
                        count++;
                    } else {
                        break;
                    }
                }
                pointLength[i][j][0] = count;
            }
            if (i != 0 && m2.get(i - 1, j)[0] == 0) {
                pointLength[i][j][1] = pointLength[i - 1][j][1];
            } else {
                int count = 0;
                for (int k = i + 1; k < hight; k++) {
                    if (m2.get(k, j)[0] == 0) {
                        count++;
                    } else {
                        break;
                    }
                }
                pointLength[i][j][1] = count;
            }

            //System.out.println(data[0]);
        }
    }
    String temp = "";
    Mat convertArea = m2.clone();

    int[][] balckWhite = new int[hight][width];

    for (int i = 0; i < hight; i++) {
        temp = "";
        for (int j = 0; j < width; j++) {
            if (i == 0 || j == 0 || i == hight - 1 || j == width - 1) {
                temp = temp + "@";
                balckWhite[i][j] = 1;

                double[] data = m2.get(i, j);
                data[0] = 255.0;
                convertArea.put(i, j, data);
            } else if (pointLength[i][j][0] > 150 && pointLength[i][j][1] > 6) {
                temp = temp + "@";
                balckWhite[i][j] = 1;

                double[] data = m2.get(i, j);
                data[0] = 255.0;
                convertArea.put(i, j, data);
            } else if (pointLength[i][j][0] > 7 && pointLength[i][j][1] > 200) {
                temp = temp + "@";
                balckWhite[i][j] = 1;

                double[] data = m2.get(i, j);
                data[0] = 255.0;
                convertArea.put(i, j, data);
            } else {
                temp = temp + " ";
                balckWhite[i][j] = 0;

                double[] data = m2.get(i, j);
                data[0] = 0.0;
                convertArea.put(i, j, data);
            }

        }
        //filewrile(temp);
    }
    imshow("Convertion", convertArea);
    IsImage isImage = new IsImage();
    HeadLineDetection isHeadline = new HeadLineDetection();

    ImageBorderDetectionBFS imgBFS = new ImageBorderDetectionBFS();
    ArrayList<BorderItem> borderItems = imgBFS.getBorder(balckWhite, width, hight);
    Mat[] subMat = new Mat[borderItems.size()];
    for (int i = 0; i < borderItems.size(); i++) {
        subMat[i] = m2.submat(borderItems.get(i).getMinX(), borderItems.get(i).getMaxX(),
                borderItems.get(i).getMinY(), borderItems.get(i).getMaxY());
        if (isImage.isImage(subMat[i])) {
            System.out.println("subMat" + i + " is an image");
            //imshow("subMat" + i, subMat[i]);

        } else if (isHeadline.isHeadLine(subMat[i])) {
            System.out.println("subMat" + i + " is an Headline");
            //imshow("Headline" + i, subMat[i]);
        } else {
            System.out.println("subMat" + i + " is an Column");
            imshow("Column" + i, subMat[i]);
        }
        //imshow("subMat" + i, subMat[i]);
        bw.close();

    }

}

From source file:samples.GripPipeline.java

License:Open Source License

/**
 * Softens an image using one of several filters.
 * @param input The image on which to perform the blur.
 * @param type The blurType to perform./* w w  w  . j ava2  s.  com*/
 * @param doubleRadius The radius for the blur.
 * @param output The image in which to store the output.
 */
private void blur(Mat input, BlurType type, double doubleRadius, Mat output) {
    int radius = (int) (doubleRadius + 0.5);
    int kernelSize;
    switch (type) {
    case BOX:
        kernelSize = 2 * radius + 1;
        Imgproc.blur(input, output, new Size(kernelSize, kernelSize));
        break;
    case GAUSSIAN:
        kernelSize = 6 * radius + 1;
        Imgproc.GaussianBlur(input, output, new Size(kernelSize, kernelSize), radius);
        break;
    case MEDIAN:
        kernelSize = 2 * radius + 1;
        Imgproc.medianBlur(input, output, kernelSize);
        break;
    case BILATERAL:
        Imgproc.bilateralFilter(input, output, -1, radius, radius);
        break;
    }
}

From source file:tisir.forms.ImageObjetForm.java

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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