Java tutorial
/* * Copyright (c) Lobachevsky University, 2017. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated * documentation files (the "Software"), to deal with the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and * to permit persons to whom the Software is furnished to do so, subject to the following conditions: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following * disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided with the distribution. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. * * Developed by: Komarov Nikolay. */ package com.astrocytes.core; import org.opencv.core.CvType; import org.opencv.core.Mat; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.DataBufferByte; import java.awt.image.WritableRaster; import java.io.File; import java.io.IOException; public abstract class ImageHelper { public static BufferedImage convertMatToBufferedImage(Mat in) { BufferedImage out; byte[] data = new byte[in.cols() * in.rows() * (int) in.elemSize()]; in.get(0, 0, data); int type = BufferedImage.TYPE_3BYTE_BGR; switch (in.channels()) { case 1: type = BufferedImage.TYPE_BYTE_GRAY; break; case 3: type = BufferedImage.TYPE_3BYTE_BGR; // bgr to rgb byte b; for (int i = 0; i < data.length; i = i + 3) { b = data[i]; data[i] = data[i + 2]; data[i + 2] = b; } break; } out = new BufferedImage(in.cols(), in.rows(), type); out.getRaster().setDataElements(0, 0, in.cols(), in.rows(), data); return out; } public static Mat convertBufferedImageToMat(BufferedImage in) { byte[] pixels = ((DataBufferByte) in.getRaster().getDataBuffer()).getData(); int type = CvType.CV_8UC3; if (in.getType() == BufferedImage.TYPE_BYTE_GRAY) { type = CvType.CV_8UC1; } Mat out = new Mat(in.getHeight(), in.getWidth(), type); out.put(0, 0, pixels); return out; } public static BufferedImage cloneBufferedImage(BufferedImage in) { ColorModel cm = in.getColorModel(); boolean isAlphaPremultiplied = cm.isAlphaPremultiplied(); WritableRaster raster = in.copyData(null); return new BufferedImage(cm, raster, isAlphaPremultiplied, null); } public static void saveImage(BufferedImage image, File file) { try { ImageIO.write(image, "png", file); } catch (IOException e) { e.printStackTrace(); } } public static BufferedImage loadImage(File file) { try { return ImageIO.read(file); } catch (IOException e) { e.printStackTrace(); } return null; } public static String convertToHex(Color color) { String hex = Integer.toHexString(color.getRGB() & 0xffffff); if (hex.length() < 6) { hex = "000000".substring(0, 6 - hex.length()) + hex; } return "#" + hex; } }