0

私の画像は org.bytedeco.javacpp.Mat として表されます。そして、それをfloat / intのJava配列に変換したいだけです。変換の背後にある理由は、画像の並べ替えの目的で、他のライブラリ (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;

}
4

1 に答える 1

3

最も効率的な方法は、おそらく次のようなものです。

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);
于 2016-03-08T01:13:57.493 に答える