2016-06-21 83 views
0

OpenCVでMat​​をInteger配列に変換する方法についての提案。 http://answers.opencv.org/question/33596/convert-mat-to-byte-in-c/ からの提案を試しましたが、「java.lang.UnsupportedOperationException:Matデータ型が互換性がありません:24」 ここで何か間違っているかどうか教えてください。ここ は、以下の私のコードです:OpenCV JavaでMatを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 = falseを、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); 
関連する問題