Converting `BufferedImage` to `Mat` in OpenCV

后端 未结 9 1896
北荒
北荒 2020-11-29 04:49

How can I convert a BufferedImage to a Mat in OpenCV?

I\'m using the JAVA wrapper for OpenCV(not JavaCV

9条回答
  •  孤城傲影
    2020-11-29 05:05

    To convert from BufferedImage to Mat I use the method below:

        public static Mat img2Mat(BufferedImage image) {
            image = convertTo3ByteBGRType(image);
            byte[] data = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
            Mat mat = new Mat(image.getHeight(), image.getWidth(), CvType.CV_8UC3);
            mat.put(0, 0, data);
            return mat;
        }
    

    Before converting into Mat, I change the type of bufferedImage to TYPE_3BYTE_BGR, because to some types BufferedImages the method ((DataBufferByte) image.getRaster().getDataBuffer()).getData(); may return int[] and that would break the code.

    Below is the method for converting to TYPE_3BYTE_BGR.

        private static BufferedImage convertTo3ByteBGRType(BufferedImage image) {
            BufferedImage convertedImage = new BufferedImage(image.getWidth(), image.getHeight(),
                    BufferedImage.TYPE_3BYTE_BGR);
            convertedImage.getGraphics().drawImage(image, 0, 0, null);
            return convertedImage;
        }
    

提交回复
热议问题