Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Is BufferedImage TYPE_INT_RGB incompatible with Mat?

I have a program that I am trying to capture video and I can get it working. I got the program to work by doing this initially.

byte [] dat;
if (dat == null || dat.length != w * h * 3)
        dat = new byte [w * h * 3];
    if (img == null || img.getWidth() != w || img.getHeight() != h || img.getType() != BufferedImage.TYPE_3BYTE_BGR)
        img = new BufferedImage(w, h, BufferedImage.TYPE_3BYTE_BGR);

The camera loads but I want an RGB filter. This is what I tried to to get my RGB filter so I changed my code to this.

import org.opencv.core.Core;
import org.opencv.core.Mat;

public class Mat2Image {
    Mat mat = new Mat();
    BufferedImage img;
    int[] dat;

    Mat2Image(){
    }

    public Mat2Image(Mat mat) {
        getSpace(mat);
    }

    public void getSpace(Mat mat) {
        this.mat = mat;
        int w = mat.cols(), h = mat.rows();
        if (dat == null || dat.length != w * h)
            dat = new int[w * h];
        if (img == null || img.getWidth() != w || img.getHeight() != h || img.getType() != BufferedImage.TYPE_INT_RGB)
            img = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
    }

    BufferedImage getImage(Mat mat) {
        getSpace(mat);
        mat.get(0, 0, dat);
        img.getRaster().setDataElements(0, 0, mat.cols(), mat.rows(), dat);
        return img;
    }
    static {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    }
}

When I run the program it throws the exception java.lang.UnsupportedOperationException: Mat data type is not compatible: 16 I don't know what this means or what is causing it.