次の手順で、Android のカメラ インテントから取得した bmp 画像を処理しようとしています。
bmp
インテントから画像を取得する- OpenCV処理のために
bmp
画像をオブジェクトに変換します(問題はここから始まります)Mat
Mat
必要な OpenCV 処理を実行します (オブジェクトobjをobjとしてネイティブ処理に送信.getNativeObjAddr()
するか、Java でローカルに実行します)。Mat
オブジェクトを元に変換するbmp
問題は確かに目新しいものではありません。私は無数の同様の質問をオンラインで見つけましたが、どれも状況を解決していないようです.
結果(問題)
目的は、(上記の 4 つの手順を経た) 処理済みの画像をImageView
オブジェクトに表示することです。ただし、実行後、ImageView は変更されず、logcat は呼び出し元の行に到達すると次の警告を出力します。Utils.bitmapToMat()
W/System.err(3872): java.lang.IllegalArgumentException: mat == null
コード
onActivityResult
メソッドで使用するコードの概要を以下に示します(resultant_bmp
はカメラ インテントから取得した bmp です。単独で正常に表示されます)。
filePath
のファイル パス、名前と拡張子が含まれていresultant_bmp
ます。
if
開始条件に続く最初の 3 行はhereからのもので、前述の質問ではその使用がうまく機能しているようです。
Bitmap resultant_bmp /*image from camera*/,
bmp /*image after opencv processing*/;
Mat rgb_img, gray_img;
if (OpenCVLoader.initDebug()) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Config.RGB_565;
resultant_bmp= BitmapFactory.decodeFile(filePath, options);
/****************** Problem starts HERE ******************
Last point reachable before Logcat states:
W/System.err(4460):java.lang.IllegalArgumentException: mat == null
After this point, the program doesn't crash, but expected results
in the imageView (last line of code) do not result.
**********************************************************/
Utils.bitmapToMat(resultant_bmp, rgb_img);
Imgproc.cvtColor(rgb_img, gray_img, Imgproc.COLOR_RGBA2GRAY);
/*Do opencv processing (on gray_img) here*/
Utils.matToBitmap(gray_img, bmp);
imageView.setImageBitmap(bmp);
}
これまでの試みと研究
- ここで同様の問題を見つけ、コマンドラインで adb を使用して、推奨どおりにファイル
libopencv_java.so
をデバイスにプッシュしようとしたところ、エラーが発生しました。system/lib
failed to copy 'libopencv_java.so' to 'system/lib/libopencv_java.so': Read-only file system
この質問は、現在の質問と同じ問題ドメインを考慮しています。上記のコードは、そこで提案されたものと同様のパターンに従いますが、それでも機能しません。
System.loadLibrary("opencv_java");
System.loadLibrary("libopencv_java");
プロジェクト プロパティに OpenCV ライブラリを追加しました。ここでさらに説明されているように、NDK ルート パスがどこにあるかを示す NDKROOT 変数と同様です。
OpenCV の別の作業サンプルで必要な画像処理 (上記のステップ 3) を試したので、問題は間違いなくステップ 2 (上記) にあります。
bmp
からMat
オブジェクトへの変換。
これには簡単な解決策があるはずですが、見つけられないようです。可能であれば、助けていただければ幸いです。
お時間をいただきありがとうございます。