Java 将BuffereImage类型_INT_RGB转换为OpenCV Mat对象

Java 将BuffereImage类型_INT_RGB转换为OpenCV Mat对象,java,opencv,bufferedimage,mat,Java,Opencv,Bufferedimage,Mat,我将BuffereImage存储在MySQL数据库中,并将其检索到java应用程序 缓冲区图像的类型为_INT _RGB 如何将该图像转换为OpenCV Mat对象 我总是得到一份工作 java.lang.UnsupportedOperationException: Mat data type is not compatible: 例外 有人能帮忙吗?我自己弄的 int[] data = ((DataBufferInt)image.getRaster().getDataBuffer(

我将BuffereImage存储在MySQL数据库中,并将其检索到java应用程序

缓冲区图像的类型为_INT _RGB

如何将该图像转换为OpenCV Mat对象

我总是得到一份工作

java.lang.UnsupportedOperationException: Mat data type is not compatible: 
例外

有人能帮忙吗?

我自己弄的

    int[] data = ((DataBufferInt)image.getRaster().getDataBuffer()).getData();
    ByteBuffer byteBuffer = ByteBuffer.allocate(data.length * 4); 
    IntBuffer intBuffer = byteBuffer.asIntBuffer();
    intBuffer.put(data);

    Mat mat = new Mat(image.getHeight(), image.getWidth(), CvType.CV_8UC3);
    mat.put(0, 0, byteBuffer.array());
    return mat;

图像是缓冲区图像,您希望转换为Mat对象。

tellob原始anwser的简化版本

public static Mat mat2(BufferedImage 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;
}

这个例子非常有用,但是我被所有的缓冲区弄糊涂了。为什么要创建
intBuffer
?你好像没用。也许倒数第二行应该是
mat.put(0,0,intBuffer.array())?或者您可以直接使用
byteBuffer
而不创建中间
intBuffer
?回答我自己的问题,
byteBuffer.asIntBuffer()
创建数据视图(与独立对象相反),因此后续的
intBuffer.put(数据)
确实修改了
byteBuffer的底层数据。对于BuffereImage.TYPE\u INT\u RGB,这将失败