2012-12-07 16 views
5

Dostaję następujące błędy użyciu niektórych rodzajowe funkcje w OpenCV dla AndroidaOpenCV nMatToBitmap asercja nie

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) 

Nie jestem pewien, czy to sam błąd lub jeśli jest to spowodowane przez inny problem.

Odpowiedz

9

Błąd twierdzenie mówi, że jeden lub więcej z następujących testów zawodzi:

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

Zgaduję info zawiera wymiary przeznaczenia bitmapy. W takim przypadku albo Mat źródłowy nie jest 2 wymiarami, albo wymiary docelowej mapy bitowej nie pasują do wymiarów źródłowego Mat.

Te dwie linie

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 

sugerują, że Mat to 144x192 a mapa bitowa jest 384x288. Wygląda na to, że jeden to portret, a drugi krajobraz plus mapa bitowa to dwa razy więcej niż rozdzielczość macie.

+1

Czy ktokolwiek mógłby zaproponować sposób skalowania Maty tak, aby był tej samej wielkości Bitmapy? Mam ten sam problem, ale nadal uczę się OpenCV, więc nie wystarczy mu umiejętności ... Z góry dziękuję! –

+0

Pytania najlepiej jest publikować jako pytania, a nie jako komentarze do odpowiedzi. Pamiętaj o dołączeniu małego kodu pokazującego, co wypróbowałeś do tej pory i co dokładnie chcesz osiągnąć. – SSteve

+0

Masz całkowicie rację. Pomyślałem tylko, że ponieważ jest ściśle związane z tym pytaniem, może zostać zamieszczone tutaj. Dziękuję za szybką odpowiedź. –

1

nie mam wystarczająco dużo rep uwag więc będę stanowić odpowiedź Zamiast:

podczas pracy z metoda „onCameraFrame” - to stwierdzenie jest wyrzucane jeśli „mata” wrócisz nie pasuje rozmiar ramki używanej do wyświetlania wyników.

Innymi słowy - jeśli zmieniasz rozmiar w celu przetwarzania, pamiętaj, aby przywrócić go do oryginalnego rozmiaru przed ponownym wyświetleniem.

@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

Ktoś inny określił już moją odpowiedź - https://stackoverflow.com/questions/37970551/opencv-resize-failing – razodactyl

Powiązane problemy