2016-06-21 90 views
0

有關如何將Mat轉換爲OpenCV中的整數數組的任何建議。我試過的建議,一個從http://answers.opencv.org/question/33596/convert-mat-to-byte-in-c/ 但它給我下面的錯誤:「java.lang.UnsupportedOperationException:墊數據類型不兼容:24」 請讓我知道,如果我錯了,在這裏做一些事情。 這裏是我下面的代碼:如何將Mat轉換爲OpenCV java中的Interger數組?

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; 
} 

,當我嘗試使用這段代碼轉換:

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

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

我得到這個錯誤:「了java.lang.RuntimeException:母語墊具有意想不到的類型或尺寸:無光澤[480 * 640 * CV_8UC4,isCont =真,isSubmat =假,nativeObj = 0x7ffc35926ca0,DATAADDR = 0x7ffc35a09010]」

回答

0

這是我如何解決這個問題:

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);