2016-06-21 55 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);