2016-06-21 8 views
0

Jeder Vorschlag, wie man ein Mat in ein Integer-Array in OpenCV konvertiert. Ich habe einen der Vorschläge aus http://answers.opencv.org/question/33596/convert-mat-to-byte-in-c/ versucht, aber es gibt mir den folgenden Fehler: "java.lang.UnsupportedOperationException: Mat Datentyp ist nicht kompatibel: 24" Bitte lassen Sie mich wissen, wenn ich hier etwas falsch mache. Hier ist mein Code unten:Wie konvertiert man Mat in Interger Array in OpenCV Java?

public void onCameraViewStarted(int width, int height) { 
    mRgba = new Mat(width, height, CvType.CV_32SC4); 
    mYuv = new Mat(width,height,CvType.CV_8SC4); 
} 

public void onCameraViewStopped() { 
    mRgba.release(); 
    mYuv.release(); 
} 

public Mat onCameraFrame(CvCameraViewFrame inputFrame) { 

    mRgba = inputFrame.rgba(); 
    Imgproc.cvtColor(mRgba,mYuv,Imgproc.COLOR_RGBA2YUV_IYUV); 

    int[] rgba = new int[(int)(mRgba.total()*mRgba.channels())]; 
    mRgba.get(0,0,rgba); 

    byte[] yuv = new byte[(int)(mYuv.total()*mYuv.channels())]; 
    mYuv.get(0,0,yuv); 

    FindFeatures(mRgba.width(),mRgba.height(),yuv,rgba); 

    return mRgba; 
} 

Und wenn ich versuche, mit diesem Stück Code zu konvertieren:

MatOfInt r = new MatOfInt(); 
    mRgba.assignTo(r); 
    int[] rgba = r.toArray(); 

    MatOfByte y = new MatOfByte(); 
    mYuv.assignTo(y); 
    byte[] yuv = y.toArray(); 

ich diese Fehlermeldung: "java.lang.RuntimeException: Gebürtige Mat unerwartete Art hat oder Größe: Mat [480 * 640 * CV_8UC4, isCont = true, isSubmat = false, nativeObj = 0x7ffc35926ca0, dataAddr = 0x7ffc35a09010]“

Antwort

0

Dies ist, wie ich es lösen:

byte[] yuv = new byte[(int)(mYuv.total()*mYuv.channels())]; 
    mYuv.get(0,0,yuv); 

    MatOfInt rgb = new MatOfInt(CvType.CV_32S); 
    mRgba.convertTo(rgb,CvType.CV_32S); 
    int[] rgba = new int[(int)(rgb.total()*rgb.channels())]; 
    rgb.get(0,0,rgba);