10

OpenCV for Android内のいくつかの一般的な機能を使用すると、次のエラーが発生します

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)

これがエラーそのものなのか、それとも別の問題が原因なのかはわかりません。

4

2 に答える 2

18

アサーションエラーは、次のテストの1つ以上が失敗していることを示しています。

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

info宛先ビットマップのサイズが含まれていると思います。その場合、ソースマットが2次元でないか、宛先ビットマップの次元がソースマットの次元と一致しません。

これらの2行

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

マットが144x192で、ビットマップが384x288であることをお勧めします。1つは縦向きで、もう1つは横向きで、ビットマップはマットの2倍の解像度のようです。

于 2012-12-08T00:11:03.840 に答える
4

コメントするのに十分な担当者がいないので、代わりに回答を提供します。

'onCameraFrame'メソッドを使用する場合-返される'mat'が出力の表示に使用されるフレームのサイズと一致しない場合、このアサーションがスローされます。

つまり、ある種の処理のためにサイズを変更する場合は、ディスプレイに戻す前に、必ず元のサイズに戻してください。

@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, 480); // Scale back down to 640x480 (original dim.)
    Imgproc.resize(resizeImage, afterResize, szAfter);

    return afterResize;
}
于 2017-07-12T08:45:25.360 に答える