2012-12-07 16 views
5

sto ottenendo i seguenti errori utilizzando alcune funzioni generiche all'interno OpenCV per androidOpenCV nMatToBitmap Asserzione non riuscita

12-05 21:08:55.486: E/cv::error()(6658): OpenCV Error: Assertion failed (src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols) in void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean), file /home/oleg/sources/opencv/modules/java/generator/src/cpp/utils.cpp, line 107 
12-05 21:08:55.486: E/org.opencv.android.Utils(6658): nMatToBitmap catched cv::Exception: /home/oleg/sources/opencv/modules/java/generator/src/cpp/utils.cpp:107: error: (-215) src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols in function void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean) 
12-05 21:08:55.486: E/CameraBridge(6658): Mat type: Mat [ 144*192*CV_8UC3, isCont=true, isSubmat=false, nativeObj=0x1024c0, dataAddr=0x44783010 ] 
12-05 21:08:55.486: E/CameraBridge(6658): Bitmap type: 384*288 
12-05 21:08:55.486: E/CameraBridge(6658): Utils.matToBitmap() throws an exception: /home/oleg/sources/opencv/modules/java/generator/src/cpp/utils.cpp:107: error: (-215) src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols in function void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean) 

Non sono sicuro se questo è l'errore in sé o se è causato da un altro problema.

risposta

9

L'errore di asserzione si sta dicendo che uno o più dei seguenti test sta fallendo:

src.dims == 2 
info.height == (uint32_t)src.rows 
info.width == (uint32_t)src.cols 

Sto indovinando info contiene le dimensioni della bitmap di destinazione. In tal caso, il tuo Mat sorgente non è di 2 dimensioni o le dimensioni della bitmap di destinazione non corrispondono alle dimensioni del Mat sorgente.

Queste due linee

12-05 21:08:55.486: E/CameraBridge(6658): Mat type: Mat [ 144*192*CV_8UC3, isCont=true, isSubmat=false, nativeObj=0x1024c0, dataAddr=0x44783010 ] 
12-05 21:08:55.486: E/CameraBridge(6658): Bitmap type: 384*288 

suggeriscono che il vostro Mat è 144x192 e la vostra bitmap è 384x288. Sembra che uno sia ritratto e l'altro paesaggio più la tua bitmap è il doppio della risoluzione del tuo Mat.

+1

Qualcuno potrebbe suggerire un modo per ridimensionare il Mat in modo che abbia la stessa dimensione della Bitmap? Sto avendo lo stesso problema, ma sto ancora imparando OpenCV quindi non abbastanza competenze con esso ... Grazie in anticipo! –

+0

Le domande sono meglio pubblicate come domande, non come commenti alle risposte. Assicurati di includere un piccolo codice che mostra ciò che hai provato finora e che cosa stai cercando di realizzare esattamente. – SSteve

+0

Hai perfettamente ragione. Ho pensato che solo perché è strettamente correlato a questa domanda potrebbe essere pubblicato qui. Grazie per la tua risposta veloce. –

1

io non ho abbastanza rep di commentare quindi dovrò dare una risposta invece:

Quando si lavora con il metodo 'onCameraFrame' - questa affermazione è gettato se il 'mat' ritorni non corrisponde la dimensione del frame utilizzato per visualizzare l'output.

In altre parole, se si sta ridimensionando per una sorta di elaborazione, assicurarsi di riportarla alla dimensione originale prima di rimetterla sul display.

@Override 
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame 
inputFrame) { 
    mRgba = inputFrame.rgba(); 

    Mat resizeImage = new Mat(); 
    Size sz = new Size(800, 600); // Scale up to 800x600 
    Imgproc.resize(mRgba, resizeImage, sz); 

    // Do some sort of processing here on resized image. 

    Mat afterResize = new Mat(); 
    Size szAfter = new Size(640, // Scale back down to 640x480 (original dim.) 
    Imgproc.resize(resizeImage, afterResize, szAfter); 

    return afterResize; 
} 
+0

Qualcun'altro ha già specificato la mia risposta - https://stackoverflow.com/questions/37970551/opencv-resize-failing – razodactyl

Problemi correlati