ImageUtil

作者: 翼徳 | 来源:发表于2018-03-22 18:58 被阅读52次

    功能列表

    • 将 opencv 中的 Mat 对象转为 Java 中的 BufferedImage 对象;
    • 预览指定图像;

    相关依赖

    OpenCV 2.3.14

    源代码

    package com.dotions.opencv;
    
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    
    import javax.imageio.ImageIO;
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    
    import org.opencv.core.Mat;
    
    /**
     * 图像相关工具类
     * 
     * Created by wyf0931 on 2018-03-22.
     */
    public class ImageUtil {
    
        /**
         * 预览指定的图像
         * 
         * @param image
         */
        public static void preview(Mat imageMat) {
            BufferedImage image = mat2BufferedImage(imageMat);
            preview(image);
        }
    
        /**
         * 预览指定的图像
         * 
         * @param image
         */
        public static void preview(BufferedImage image) {
            JFrame frame = new JFrame();
            frame.setTitle("Preview");
            frame.setBounds(20, 20, image.getWidth(), image.getHeight());
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().setLayout(null);
            JLabel label = new JLabel();
            label.setBounds(0, 0, image.getWidth(), image.getHeight());
            frame.getContentPane().add(label);
            label.setIcon(new ImageIcon(image));
            frame.setVisible(true);
        }
    
        /**
         * 预览指定的图像
         * 
         * @param filename
         * @throws IOException
         */
        public static void preview(String filename) throws IOException {
            File image = new File(filename);
            preview(image);
        }
    
        /**
         * 预览指定的图像
         * 
         * @param filename
         * @throws IOException
         */
        public static void preview(File image) throws IOException {
            BufferedImage bufferedImage = ImageIO.read(image);
            preview(bufferedImage);
        }
    
        /**
         * 将 opencv 中 Mat 对象转为 Java 中的 BufferedImage 对象。
         * 
         * @param mat
         */
        public static BufferedImage mat2BufferedImage(Mat mat) {
            int cols = mat.cols();
            int rows = mat.rows();
            int elemSize = (int) mat.elemSize();
            byte[] data = new byte[cols * rows * elemSize];
            int type;
            mat.get(0, 0, data);
            switch (mat.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;
            default:
                return null;
            }
            BufferedImage image = new BufferedImage(cols, rows, type);
            image.getRaster().setDataElements(0, 0, cols, rows, data);
            return image;
        }
    }
    
    

    相关文章

      网友评论

          本文标题:ImageUtil

          本文链接:https://www.haomeiwen.com/subject/cmuaqftx.html