6

スターターとして、OpenCV を介してビットマップをグレースケールに変換したいだけです。すべてを実行していますが、画像をグレースケールに変換しようとするとすぐにクラッシュします。誰でも助けてもらえますか?スニペットで十分だといいのですが、そうでない場合は残りを添付できます。

Java ファイルの一部:

                // convert to opencv structure
                Mat image = new Mat();
                Mat grayimage = new Mat();
                Utils.bitmapToMat(b2, image);

                // call opencv for processing
                grayimage = convertToGray (image);

                // convert back
                Utils.matToBitmap(grayimage, b2);

JNI cpp ファイル:

JNIEXPORT jlong JNICALL Java_com_my_sample_MainMenuActivity_convertToGray (JNIEnv*, jobject, jlong addrRGBA)
{
    LOGI("Converting to Gray.");
    Mat *mRGBA  = (Mat*)addrRGBA;

    Mat *_retval_;
    cvtColor(*mRGBA, *_retval_, CV_RGB2GRAY);

    LOGI("Successfully finished Converting to Gray.");
    return (jlong) _retval_;
}

画像を変換したことをログに記録することは決してありません。Bitmap が Mat に適切に変換されていないようです。Bitmap 自体は存在しますが、ImageView で表示できます。私が(明らかに)間違っていることの手がかりはありますか?

05-14 21:26:27.082: I/native(22394): Converting to Gray.
05-14 21:26:27.082: A/libc(22394): Fatal signal 11 (SIGSEGV) at 0xcd10001d (code=1), thread 22394 (ialabs.mysample)

この質問が他の場所で回答されている場合は申し訳ありませんが、Mat の例は見つかりませんでした。IplImage の例がいくつかあるようです。

4

3 に答える 3

16

2 つの空Matのオブジェクトがあります。空のものをグレーに変換することはできません。

これを試して:

Mat tmp = new Mat (b.getWidth(), b.getHeight(), CvType.CV_8UC1);
Utils.bitmapToMat(b, tmp);
Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_RGB2GRAY);

bとしてのあなたのイメージはどこにありますかBitmap

Utils.matToBitmap(tmp, b);

これを追加して、Matオブジェクトを に戻しますBitmap

于 2013-05-17T06:27:28.693 に答える
0

単純なエラー:

convertToGray (image.getNativeObjAddr());

正しい。

于 2013-05-15T17:44:46.523 に答える