将 org.bytedeco.javacpp.Mat 转换为 Java int/float 数组
Converting org.bytedeco.javacpp.Mat to Java int/float array
我的图像表示为org.bytedeco.javacpp.Mat。我只是想将它转换为 Java 的 float/int 数组。转换背后的原因是我想在其他库 (Nd4j) 中使用 Java 数组来进行图像置换。我尝试了以下方法,但它们不起作用。
private static int[] MatToFloatArray1(Mat mat) {
org.bytedeco.javacpp.BytePointer matData = mat.data();
byte[] d = new byte[matData.capacity()];
return toIntArray(d);
}
private static int[] MatToFloatArray2(Mat mat) {
org.bytedeco.javacpp.BytePointer matData = mat.data();
IntBuffer intBuffer = matData.asBuffer().asIntBuffer();
return intBuffer.array();
}
private static int[] toIntArray(byte[] d) {
IntBuffer intBuf =
ByteBuffer.wrap(d)
.order(ByteOrder.BIG_ENDIAN)
.asIntBuffer();
int[] array = new int[intBuf.remaining()];
return array;
}
最有效的方法可能如下所示:
Mat intMat = new Mat();
mat.convertTo(intMat, CV_32S);
IntBuffer intBuffer = intMat.createBuffer();
int[] intArray = new int[intBuffer.capacity()];
intBuffer.get(intArray);
这是int
的情况,但我们也可以对float
做同样的事情:
Mat floatMat = new Mat();
mat.convertTo(floatMat, CV_32F);
FloatBuffer floatBuffer = floatMat.createBuffer();
float[] floatArray = new float[floatBuffer.capacity()];
floatBuffer.get(floatArray);
我的图像表示为org.bytedeco.javacpp.Mat。我只是想将它转换为 Java 的 float/int 数组。转换背后的原因是我想在其他库 (Nd4j) 中使用 Java 数组来进行图像置换。我尝试了以下方法,但它们不起作用。
private static int[] MatToFloatArray1(Mat mat) {
org.bytedeco.javacpp.BytePointer matData = mat.data();
byte[] d = new byte[matData.capacity()];
return toIntArray(d);
}
private static int[] MatToFloatArray2(Mat mat) {
org.bytedeco.javacpp.BytePointer matData = mat.data();
IntBuffer intBuffer = matData.asBuffer().asIntBuffer();
return intBuffer.array();
}
private static int[] toIntArray(byte[] d) {
IntBuffer intBuf =
ByteBuffer.wrap(d)
.order(ByteOrder.BIG_ENDIAN)
.asIntBuffer();
int[] array = new int[intBuf.remaining()];
return array;
}
最有效的方法可能如下所示:
Mat intMat = new Mat();
mat.convertTo(intMat, CV_32S);
IntBuffer intBuffer = intMat.createBuffer();
int[] intArray = new int[intBuffer.capacity()];
intBuffer.get(intArray);
这是int
的情况,但我们也可以对float
做同样的事情:
Mat floatMat = new Mat();
mat.convertTo(floatMat, CV_32F);
FloatBuffer floatBuffer = floatMat.createBuffer();
float[] floatArray = new float[floatBuffer.capacity()];
floatBuffer.get(floatArray);