Java 将图像转换为Mat和back
我正在尝试将我的图像转换为8位3通道的mat,然后再转换回OpenCV中的图像。但我的代码似乎不起作用 有人知道为什么这样不行吗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[
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个频道吗?我不太明白怎么做。