2016-06-21 17 views
0

OpenCV에서 매트를 정수 배열로 변환하는 방법에 대한 제안. http://answers.opencv.org/question/33596/convert-mat-to-byte-in-c/ 에서 제안 사항 중 하나를 시도했지만 다음과 같은 오류가 발생합니다. "java.lang.UnsupportedOperationException : 매트 데이터 형식이 호환되지 않습니다 : 24" 여기에 잘못된 것이 있다면 알려주십시오. 여기 아래에있는 내 코드입니다 :매트를 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);