List of usage examples for org.opencv.imgcodecs Imgcodecs imread
public static Mat imread(String filename)
From source file:Questao1.java
public Questao1() { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); this.img1 = "lena.jpg"; this.img2 = "baboon.jpg"; this.image2 = Imgcodecs.imread(img2); this.image1 = Imgcodecs.imread(img1); this.image1bin = new Mat(); this.image2bin = new Mat(); this.output = new Mat(256, 256, CvType.CV_8UC3); showResult(img1);//from ww w . j a va 2s.c om showResult(img2); in = new Scanner(System.in); do { System.out.println("Escolha a operao: "); System.out.println("1 - AND"); System.out.println("2 - OR"); System.out.println("3 - XOR"); System.out.println("4 - NOT"); System.out.println("5 - SOMA"); System.out.println("6 - SUBTRAO"); System.out.println("7 - MULTIPLICAO"); System.out.println("8 - DIVISO"); System.out.println("0 - SAIR"); while ((op = in.nextInt()) != 0) { realizarOperacoes(); } if (op == 0) { return; } } while (op < 0 || op > 8); }
From source file:Questao2.java
public Questao2() { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); this.in = new Scanner(System.in); this.output = new Mat(256, 26, CvType.CV_8UC3); this.img = "lena.jpg"; this.image = Imgcodecs.imread(img); showResult(img);/*from w ww. j av a 2 s . co m*/ do { System.out.println("Escolha o rudo a ser aplicado: "); System.out.println("1 - Gaussiano"); System.out.println("2 - Sal e Pimenta"); System.out.println("0 - Sair"); while ((ruido = in.nextInt()) != 0) { aplicarRuidos(); } if (ruido == 0) { break; } } while (ruido < 0 || ruido > 8); do { System.out.println("Escolha o filtro a ser aplicado: "); System.out.println("1 - Mdia"); System.out.println("2 - Mediana"); System.out.println("3 - Gaussiano"); System.out.println("4 - Mximo"); System.out.println("5 - Mnimo"); while ((filtro = in.nextInt()) != 0) { aplicarFiltros(); } if (filtro == 0) { return; } } while (filtro < 0 || filtro > 5); }
From source file:Questao2.java
void media() { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); String url = escolherUrl();/*from w w w .j a v a 2 s. com*/ /** * Transforma imagem em matriz para facilitar manipulacao */ Mat img = Imgcodecs.imread(url); /** * Cria matriz de destino */ Mat dst = new Mat(); /** * Aplicacao do filtro da media * blur(matriz original, matriz destino, tamanho da mascara) */ System.out.println("Escolha as dimenses da mscara: "); System.out.print("X: "); int mx = in.nextInt(); System.out.print("Y: "); int my = in.nextInt(); Imgproc.blur(img, dst, new Size(mx, my)); /** * Salva o resultado em media.jpg */ Imgcodecs.imwrite("media.jpg", dst); showResult("media.jpg"); }
From source file:Questao2.java
void mediana() { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); String url = escolherUrl();//from ww w .jav a 2 s . co m /** * Transforma imagem em matriz para facilitar manipulacao */ Mat img = Imgcodecs.imread(url); /** * Cria matriz de destino */ Mat dst = new Mat(); /** * Aplica filtro da mediana * medianBlur(imagem original, imagem destino, ksize) */ System.out.print("K-size: "); int ksize = in.nextInt(); Imgproc.medianBlur(img, dst, ksize); /** * Salva resultado em mediana.jpg */ Imgcodecs.imwrite("mediana.jpg", dst); showResult("mediana.jpg"); }
From source file:Questao2.java
void gaussiano() { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); String url = escolherUrl();/*from w ww. j a v a 2 s .co m*/ /** * Transforma imagem em matriz para facilitar manipulacao */ Mat img = Imgcodecs.imread(url); /** * Cria matriz de destino */ Mat dst = new Mat(); /** * Aplica o filtro gaussiano * GaussianBlur(imagem original, imgagem destino, tamanho da mascara, sygmaX, sygmaY) */ System.out.println("Dimenses da mscara: "); System.out.print("X: "); int mx = in.nextInt(); System.out.print("Y: "); int my = in.nextInt(); System.out.println("Valores Sygma: "); System.out.print("X: "); int sx = in.nextInt(); System.out.print("Y: "); int sy = in.nextInt(); Imgproc.GaussianBlur(img, dst, new Size(mx, my), sx, sy); /** * Salva resultado em gaussian-blur.jpg */ Imgcodecs.imwrite("gaussian-blur.jpg", dst); showResult("gaussian-blur.jpg"); }
From source file:Questao2.java
void maximo() { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); String url = escolherUrl();/* w w w . ja v a 2 s. co m*/ /** * Transforma imagem em matriz para facilitar manipulacao */ Mat img = Imgcodecs.imread(url); /** * Cria matriz destinoo */ Mat dst = new Mat(); /** * Cria imagem com o valor 1 em todos os pixels de * tamnho escolhido pelo usuario */ System.out.println("Digite as dimenses da mscara: "); System.out.print("X: "); int mx = in.nextInt(); System.out.print("Y: "); int my = in.nextInt(); Mat one = Mat.ones(mx, my, CvType.CV_32F); /** * Aplica o filtro maximo utilizando a matriz one como mascara * dilate(imagem original, imagem destino, mascara) */ Imgproc.dilate(img, dst, one); /** * Salva o resultado na matriz maximo.jpg */ Imgcodecs.imwrite("maximo.jpg", dst); showResult("maximo.jpg"); }
From source file:Questao2.java
void minimo() { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); String url = escolherUrl();//w w w . j av a 2 s .co m /** * Transforma imagem em matriz para facilitar manipulacao */ Mat img = Imgcodecs.imread(url); /** * Cria matriz de destino */ Mat dst = new Mat(); /** * Cria matriz com o valor 1 em todos os pixels de * tamanho definido pelo usuario */ System.out.println("Digite as dimenses da mscara: "); System.out.print("X: "); int mx = in.nextInt(); System.out.print("Y: "); int my = in.nextInt(); Mat one = Mat.ones(mx, my, CvType.CV_32F); /** * Aplica o filtro minimo * erode(imagem original, imagem destino, matriz de mascara) */ Imgproc.erode(img, dst, one); /** * Salva resultado em minimo.jpg */ Imgcodecs.imwrite("minimo.jpg", dst); showResult("minimo.jpg"); }
From source file:Face_Reco.java
public static void main(String args[]) { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); VideoCapture camera = new VideoCapture(0); if (!camera.isOpened()) { System.out.println("Error"); } else {// ww w . j ava 2 s . c om Mat frame = new Mat(); while (true) { if (camera.read(frame)) { System.out.println("Frame Obtained"); System.out.println("Captured Frame Width" + frame.width() + "Height" + frame.height()); Imgcodecs.imwrite("Camera.jpg", frame); Imgcodecs.imread("camera.jpg"); Imgcodecs.imread("camera.jpg", Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE); System.out.println("Done!"); break; } } } camera.release(); }
From source file:LicenseDetection.java
public void run() { // ------------------ set up tesseract for later use ------------------ ITesseract tessInstance = new Tesseract(); tessInstance.setDatapath("/Users/BradWilliams/Downloads/Tess4J"); tessInstance.setLanguage("eng"); // ------------------ Save image first ------------------ Mat img;/*from w w w. j a va 2s . c o m*/ img = Imgcodecs.imread(getClass().getResource("/resources/car_2_shopped2.jpg").getPath()); Imgcodecs.imwrite("/Users/BradWilliams/ComputerVisionOut/True_Image.png", img); // ------------------ Convert to grayscale ------------------ Mat imgGray = new Mat(); Imgproc.cvtColor(img, imgGray, Imgproc.COLOR_BGR2GRAY); Imgcodecs.imwrite("/Users/BradWilliams/ComputerVisionOut/Gray.png", imgGray); // ------------------ Blur so edge detection wont pick up noise ------------------ Mat imgGaussianBlur = new Mat(); Imgproc.GaussianBlur(imgGray, imgGaussianBlur, new Size(3, 3), 0); Imgcodecs.imwrite("/Users/BradWilliams/ComputerVisionOut/gaussian_blur.png", imgGaussianBlur); // ****************** Create image that will be cropped at end of program before OCR *************************** // ------------------ Binary theshold for OCR (used later)------------------ Mat imgThresholdOCR = new Mat(); Imgproc.adaptiveThreshold(imgGaussianBlur, imgThresholdOCR, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 7, 10); //Imgproc.threshold(imgSobel,imgThreshold,120,255,Imgproc.THRESH_TOZERO); Imgcodecs.imwrite("/Users/BradWilliams/ComputerVisionOut/imgThresholdOCR.png", imgThresholdOCR); // ------------------ Erosion operation------------------ Mat kern = Imgproc.getStructuringElement(Imgproc.CV_SHAPE_CROSS, new Size(3, 3)); Mat imgErodeOCR = new Mat(); Imgproc.morphologyEx(imgThresholdOCR, imgErodeOCR, Imgproc.MORPH_DILATE, kern); //Imgproc.MORPH_DILATE is performing erosion, wtf? Imgcodecs.imwrite("/Users/BradWilliams/ComputerVisionOut/imgErodeOCR.png", imgErodeOCR); //------------------ Dilation operation ------------------ Mat kernall = Imgproc.getStructuringElement(Imgproc.CV_SHAPE_RECT, new Size(3, 3)); Mat imgDilateOCR = new Mat(); Imgproc.morphologyEx(imgErodeOCR, imgDilateOCR, Imgproc.MORPH_ERODE, kernall); Imgcodecs.imwrite("/Users/BradWilliams/ComputerVisionOut/imgDilateOCR.png", imgDilateOCR); // ************************************************************************************************************* // // ------------------ Close operation (dilation followed by erosion) to reduce noise ------------------ // Mat k = Imgproc.getStructuringElement(Imgproc.CV_SHAPE_RECT, new Size(3, 3)); // Mat imgCloseOCR = new Mat(); // Imgproc.morphologyEx(imgThresholdOCR,imgCloseOCR,1,k); // Imgcodecs.imwrite("/Users/BradWilliams/ComputerVisionOut/imgCloseOCR.png", imgCloseOCR); // ------------------ Sobel vertical edge detection ------------------ Mat imgSobel = new Mat(); Imgproc.Sobel(imgGaussianBlur, imgSobel, -1, 1, 0); Imgcodecs.imwrite("/Users/BradWilliams/ComputerVisionOut/imgSobel.png", imgSobel); // ------------------ Binary theshold ------------------ Mat imgThreshold = new Mat(); Imgproc.adaptiveThreshold(imgSobel, imgThreshold, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 99, -60); //Imgproc.threshold(imgSobel,imgThreshold,120,255,Imgproc.THRESH_TOZERO); Imgcodecs.imwrite("/Users/BradWilliams/ComputerVisionOut/imgThreshold.png", imgThreshold); // // ------------------ Open operation (erosion followed by dilation) ------------------ // Mat ker = Imgproc.getStructuringElement(Imgproc.CV_SHAPE_CROSS, new Size(3, 2)); // Mat imgOpen = new Mat(); // Imgproc.morphologyEx(imgThreshold,imgOpen,0,ker); // Imgcodecs.imwrite("/Users/BradWilliams/ComputerVisionOut/imgOpen.png", imgOpen); // ------------------ Close operation (dilation followed by erosion) to reduce noise ------------------ Mat kernel = Imgproc.getStructuringElement(Imgproc.CV_SHAPE_RECT, new Size(22, 8)); Mat imgClose = new Mat(); Imgproc.morphologyEx(imgThreshold, imgClose, 1, kernel); Imgcodecs.imwrite("/Users/BradWilliams/ComputerVisionOut/imgClose.png", imgClose); // ------------------ Find contours ------------------ List<MatOfPoint> contours = new ArrayList<>(); Imgproc.findContours(imgClose, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE); // **************************** DEBUG CODE ************************** Mat contourImg = new Mat(imgClose.size(), imgClose.type()); for (int i = 0; i < contours.size(); i++) { Imgproc.drawContours(contourImg, contours, i, new Scalar(255, 255, 255), -1); } Imgcodecs.imwrite("/Users/BradWilliams/ComputerVisionOut/contours.png", contourImg); // ****************************************************************** // -------------- Convert contours -------------------- //Convert to MatOfPoint2f so that minAreaRect can be called List<MatOfPoint2f> newContours = new ArrayList<>(); for (MatOfPoint mat : contours) { MatOfPoint2f newPoint = new MatOfPoint2f(mat.toArray()); newContours.add(newPoint); } //Get minAreaRects List<RotatedRect> minAreaRects = new ArrayList<>(); for (MatOfPoint2f mat : newContours) { RotatedRect rect = Imgproc.minAreaRect(mat); /* --------------- BUG WORK AROUND ------------ Possible bug: When converting from MatOfPoint2f to RotatectRect the width height were reversed and the angle was -90 degrees from what it would be if the width and height were correct. When painting rectangle in image, the correct boxes were produced, but performing calculations on rect.angle rect.width, or rect.height yielded unwanted results. The following work around is buggy but works for my purpose */ if (rect.size.width < rect.size.height) { double temp; temp = rect.size.width; rect.size.width = rect.size.height; rect.size.height = temp; rect.angle = rect.angle + 90; } //check aspect ratio and area and angle if (rect.size.width / rect.size.height > 1 && rect.size.width / rect.size.height < 5 && rect.size.width * rect.size.height > 10000 && rect.size.width * rect.size.height < 50000 && Math.abs(rect.angle) < 20) { minAreaRects.add(rect); } //minAreaRects.add(rect); } // **************************** DEBUG CODE ************************** /* The following code is used to draw the rectangles on top of the original image for debugging purposes */ //Draw Rotated Rects Point[] vertices = new Point[4]; Mat imageWithBoxes = img; // Draw color rectangles on top of binary contours // Mat imageWithBoxes = new Mat(); // Mat temp = imgDilateOCR; // Imgproc.cvtColor(temp, imageWithBoxes, Imgproc.COLOR_GRAY2RGB); for (RotatedRect rect : minAreaRects) { rect.points(vertices); for (int i = 0; i < 4; i++) { Imgproc.line(imageWithBoxes, vertices[i], vertices[(i + 1) % 4], new Scalar(0, 0, 255), 2); } } Imgcodecs.imwrite("/Users/BradWilliams/ComputerVisionOut/imgWithBoxes.png", imageWithBoxes); // ****************************************************************** // **************************** DEBUG CODE ************************** // for(RotatedRect rect : minAreaRects) { // System.out.println(rect.toString()); // } // ****************************************************************** /* In order to rotate image without cropping it: 1. Create new square image with dimension = diagonal of initial image. 2. Draw initial image into the center of new image. Insert initial image at ROI (Region of Interest) in new image 3. Rotate new image */ //Find diagonal/hypotenuse int hypotenuse = (int) Math.sqrt((img.rows() * img.rows()) + (img.cols() * img.cols())); //New Mat with hypotenuse as height and width Mat rotateSpace = new Mat(hypotenuse, hypotenuse, 0); int ROI_x = (rotateSpace.width() - imgClose.width()) / 2; //x start of ROI int ROI_y = (rotateSpace.height() - imgClose.height()) / 2; //x start of ROI //designate region of interest Rect r = new Rect(ROI_x, ROI_y, imgClose.width(), imgClose.height()); //Insert image into region of interest imgDilateOCR.copyTo(rotateSpace.submat(r)); Mat rotatedTemp = new Mat(); //Mat to hold temporarily rotated mat Mat rectMat = new Mat();//Mat to hold rect contents (needed for looping through pixels) Point[] rectVertices = new Point[4];//Used to build rect to make ROI Rect rec = new Rect(); List<RotatedRect> edgeDensityRects = new ArrayList<>(); //populate new arraylist with rects that satisfy edge density int count = 0; //Loop through Rotated Rects and find edge density for (RotatedRect rect : minAreaRects) { count++; rect.center = new Point((float) ROI_x + rect.center.x, (float) ROI_y + rect.center.y); //rotate image to math orientation of rotated rect rotate(rotateSpace, rotatedTemp, rect.center, rect.angle); //remove rect rotation rect.angle = 0; //get vertices from rotatedRect rect.points(rectVertices); // **************************** DEBUG CODE ************************** // // for (int k = 0; k < 4; k++) { // System.out.println(rectVertices[k]); // Imgproc.line(rotatedTemp, rectVertices[k], rectVertices[(k + 1) % 4], new Scalar(0, 0, 255), 2); // } // // Imgcodecs.imwrite("/Users/BradWilliams/ComputerVisionOut/rotated" + count + ".png", rotatedTemp); // ***************************************************************** //build rect to use as ROI rec = new Rect(rectVertices[1], rectVertices[3]); rectMat = rotatedTemp.submat(rec); Imgcodecs.imwrite("/Users/BradWilliams/ComputerVisionOut/extracted" + count + ".png", rectMat); //find edge density // // ------------------------ edge density check NOT IMPLEMENTED -------------------- // /* // Checking for edge density was not necessary for this image so it was not implemented due to lack of time // */ // for(int i = 0; i < rectMat.rows(); ++i){ // for(int j = 0; j < rectMat.cols(); ++j){ // // //add up white pixels // } // } // // //check number of white pixels against total pixels // //only add rects to new arraylist that satisfy threshold edgeDensityRects.add(rect); } // **************************** DEBUG CODE ************************** Imgcodecs.imwrite("/Users/BradWilliams/ComputerVisionOut/rotatedSpace.png", rotateSpace); //Imgcodecs.imwrite("/Users/BradWilliams/ComputerVisionOut/rotatedSpaceROTATED.png", rotatedTemp); //System.out.println(imgGray.type()); // ***************************************************************** // if there is only one rectangle left, its the license plate if (edgeDensityRects.size() == 1) { String result = ""; //Hold result from OCR BufferedImage bimg; Mat cropped; cropped = rectMat.submat(new Rect(20, 50, rectMat.width() - 40, rectMat.height() - 70)); Imgcodecs.imwrite("/Users/BradWilliams/ComputerVisionOut/rectMatCropped.png", cropped); bimg = matToBufferedImage(cropped); BufferedImage image = bimg; try { result = tessInstance.doOCR(image); } catch (TesseractException e) { System.err.println(e.getMessage()); } for (int i = 0; i < 10; ++i) { } result = result.replace("\n", ""); System.out.println(result); CarProfDBImpl db = new CarProfDBImpl(); db.connect("localhost:3306/computer_vision", "root", "*******"); CarProf c = db.getCarProf(result); System.out.print(c.toString()); db.close(); } }
From source file:app.AppMain.java
/** * badly designed main aplication, use with app.GUI.java for fast results. * * @param image//from w ww . j a v a 2 s . co m * @param lookUpList * @throws IOException */ public static void main(String image, String lookUpList) throws IOException { // String imagePath = "resource\\find_small.jpg"; String imagePath = image; File imageFile = new File(imagePath); // File imageFile1 = new File("C:\\Users\\Zygis\\Desktop\\tess_test_data\\Find_1lookup.jpg"); ArrayList<String> lookupWords = new ArrayList<>(); ArrayList<OcrChar[]> foundWords = new ArrayList<>(); ArrayList<ArrayList<OcrChar>> matrix = new ArrayList<>(); Mat ImageMatrix = Imgcodecs.imread(imagePath); Scanner inFile1 = new Scanner(new File(lookUpList)); while (inFile1.hasNext()) { lookupWords.add(inFile1.nextLine().toUpperCase()); } System.out.println(lookupWords); Tesseract1 instance = new Tesseract1(); // try { instance.setHocr(true); instance.setTessVariable("tessedit_char_blacklist", "|0123456789"); // blaklistas // instance.setTessVariable("tessedit_create_boxfile", "true"); // instance.setTessVariable("save_blob_choices", "T"); // kazka padeda char atpazinimui String result = instance.doOCR(imageFile); // System.out.println(result); matrix = ParseHOCR.parse(result); System.out.println(matrix); foundWords = FindWord.findWords(matrix, lookupWords); try ( // instance.setHocr(false); // result = instance.doOCR(imageFile1); // System.out.println(result); // ----------- // writing info to html file PrintWriter writer = new PrintWriter("the-file-name.html", "UTF-8")) { writer.println(result); } } catch (TesseractException e) { System.err.println(e.getMessage()); } /*----- cross found letters from the image */ for (OcrChar[] points : foundWords) { // System.out.println(points[0].getCenterX()+" "+points[0].getCenterY()+" "+points[1].getCenterX()+" "+points[1].getCenterY()); Imgproc.line(ImageMatrix, new Point(points[0].getCenterX(), points[0].getCenterY()), new Point(points[1].getCenterX(), points[1].getCenterY()), new Scalar(0, 0, 0), 1); } // for (OcrChar[] points : foundWords) { //// System.out.println(points[0].getCenterX()+" "+points[0].getCenterY()+" "+points[1].getCenterX()+" "+points[1].getCenterY()); // Imgproc.line(ImageMatrix, new Point(points[0].getCenterX(), points[0].getCenterY()), // new Point(points[1].getCenterX(), points[1].getCenterY()), // new Scalar(0, 0, 0), 3); // } // ////------- // // DEBUG // //put regognised chars POSTION on the image ( to check recognised char matches) // for (ArrayList<OcrChar> line_array : matrix) { // for (OcrChar Char : line_array) { // Imgproc.circle(ImageMatrix, new Point(Char.getCenterX(), Char.getCenterY()), // 1, new Scalar(0, 0, 255), 4); // } // } // ////------- // // DEBUG // // put regognised chars back to the image ( to check recognised char matches) // for (ArrayList<OcrChar> line_array : matrix){ // for (OcrChar Char : line_array){ // Imgproc.putText(ImageMatrix, Char.toString(), // new Point(Char.x2, Char.y2), // 1, 2, new Scalar(0, 0, 255)); // } // } Imgcodecs.imwrite("resource\\output.jpeg", ImageMatrix); }