org.opencv.core.Mat轉換為org.bytedeco.javacpp.opencv_core.Mat


今天在做javacv圖片轉換時遇到格式報錯的問題,但是我檢查半天我的格式是Mat格式啊。

然后一查,javaCV中竟然一共有兩種Mat格式,兩者不互通,導入的依賴包也是不同的,而大部分情況下我們導入的都是org.opencv.core.*包,所以遇到另一種格式的Mat數據就會報錯。

真是讓我長見識了。

在查閱外網后終於找到了在兩種Mat格式之間相互轉化的方法。我們需要先將org.opencv.core.Mat轉化為java.awt.image.BufferedImage,再將BufferImage轉化為org.bytedeco.javacpp.opencv_core.Mat格式。

如果預先已經導入了org.opencv.core.*包的話直接將org.bytedeco.javacpp.opencv_core.Mat格式在開頭寫明,當然不要忘記導入相關的jar依賴包。

下面貼下相關的轉化方法:

org.opencv.core.Mat轉java.awt.image.BufferedImage:

    public BufferedImage matToBufferedImage(Mat frame) {       
            int type = 0;
            if (frame.channels() == 1) {
                type = BufferedImage.TYPE_BYTE_GRAY;
            } else if (frame.channels() == 3) {
                type = BufferedImage.TYPE_3BYTE_BGR;
            }
            BufferedImage image = new BufferedImage(frame.width() ,frame.height(), type);
            WritableRaster raster = image.getRaster();
            DataBufferByte dataBuffer = (DataBufferByte) raster.getDataBuffer();
            byte[] data = dataBuffer.getData();
            frame.get(0, 0, data);
            return image;
        }

BufferImage轉org.bytedeco.javacpp.opencv_core.Mat:

    public org.bytedeco.javacpp.opencv_core.Mat bufferedImageToMat(BufferedImage bi) {
            OpenCVFrameConverter.ToMat cv = new OpenCVFrameConverter.ToMat();
            return cv.convertToMat(new Java2DFrameConverter().convert(bi));
        }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM