Java 将图像转换为Mat和back

Java 将图像转换为Mat和back,java,image,opencv,mat,channels,Java,Image,Opencv,Mat,Channels,我正在尝试将我的图像转换为8位3通道的mat,然后再转换回OpenCV中的图像。但我的代码似乎不起作用 有人知道为什么这样不行吗 Mat toMat(PImage image) { int w = image.width; int h = image.height; Mat mat = new Mat(h, w, CvType.CV_8UC3); byte[] data8 = new byte[w*h*4]; int[] data32 = new int[

我正在尝试将我的图像转换为8位3通道的mat,然后再转换回OpenCV中的图像。但我的代码似乎不起作用

有人知道为什么这样不行吗

Mat toMat(PImage image) {  
  int w = image.width;  
  int h = image.height;  
  Mat mat = new Mat(h, w, CvType.CV_8UC3);  
  byte[] data8 = new byte[w*h*4];  
  int[] data32 = new int[w*h];  
  arrayCopy(image.pixels, data32);  
  ByteBuffer bBuf = ByteBuffer.allocate(w*h*4);  
  IntBuffer iBuf = bBuf.asIntBuffer();  
  iBuf.put(data32);  
  bBuf.get(data8);  
  mat.put(0, 0, data8);  
  return mat;
}  

PImage toPImage(Mat mat) { 
  int w = mat.width(); 
  int h = mat.height(); 
  PImage image = createImage(h, w, RGB); 
  byte[] data8 = new byte[w*h*4]; 
  int[] data32 = new int[w*h]; 
  mat.get(0, 0, data8); 
  ByteBuffer.wrap(data8).asIntBuffer().get(data32); 
  arrayCopy(data32, image.pixels); 
  return image;
} 

数据为4通道,但您将Mat作为8UC3而不是8UC4启动。你有什么错误?它没有显示任何错误。它只适用于图像的顶部,而不是底部。你知道如何将数据转换成3通道吗?我用这个代码来使用pyrMeanShiftFiltering函数,它需要两个mat和两个double。我对这个代码有问题。你能看看这个吗?你是否按照答案的建议做了,如果它只在顶部工作,而不是底部,那也是我能想到的解决方案。如果您想将数据更改为3通道,只需使用3个通道创建它,或者一旦您有了一个Mat,您就可以使用CVTColor如果我将其更改为8UC4,我会收到一个错误,说它必须是8UC3,如果我翻转宽度和高度,图像仍然会被切断。。。你能帮我创建3个频道吗?我不太明白怎么做。