Java 将BuffereImage类型_INT_RGB转换为OpenCV Mat对象
我将BuffereImage存储在MySQL数据库中,并将其检索到java应用程序 缓冲区图像的类型为_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(
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,这将失败