adaptiveThreshold
にOpenCVを使用しています。 OpenCVを使用した画像処理のコードは次のとおりです。
imageMat=new Mat();
Utils.bitmapToMat(bmp, imageMat);
Imgproc.cvtColor(imageMat, imageMat, Imgproc.COLOR_BGR2GRAY);
Imgproc.GaussianBlur(imageMat, imageMat, new Size(3, 3), 0);
Imgproc.adaptiveThreshold(imageMat, imageMat, 255,Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY_INV, 5, 4);
しかし、Mat
の宣言中にエラーが発生します。
No implementation found for long org.opencv.core.Mat.n_Mat() (tried Java_org_opencv_core_Mat_n_1Mat and Java_org_opencv_core_Mat_n_1Mat__)
at org.opencv.core.Mat.n_Mat(Native Method)
at org.opencv.core.Mat.<init>(Mat.Java:24)
at com.example.pial_pc.instantbookreview.ImageCapture$3.onPictureTaken(ImageCapture.Java:105)
私はOpenCVが初めてなので、エラーを明確に理解していません。このコードが属するJavaクラス全体は here です。
エラーを解消するにはどうすればよいですか?
エラーを正常に除去し、この行の実行中にアプリがクラッシュしませんimageMat=new Mat();
エラーの理由は、OpenCV4Androidライブラリをロードする前にAndroidが "onCreate"メソッドを呼び出すためです。 OpenCVManagerを使用したOpenCVの非同期初期化を使用しました。以前にBaseLoaderCallbackを作成しましたonCreateメソッド。その中で私はnew Mat()のように宣言しました:
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
Log.i("OpenCV", "OpenCV loaded successfully");
imageMat=new Mat();
} break;
default:
{
super.onManagerConnected(status);
} break;
}
}
};
次に、onResume()で、現在のアプリケーションパッケージ内からOpenCVライブラリがロードおよび初期化されているかどうかを確認しました。コードは次のとおりです。
public void onResume()
{
super.onResume();
if (!OpenCVLoader.initDebug()) {
Log.d("OpenCV", "Internal OpenCV library not found. Using OpenCV Manager for initialization");
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);
} else {
Log.d("OpenCV", "OpenCV library found inside package. Using it!");
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
}
そして、私のエラーはなくなりました。完全に更新されたJavaクラスは こちら です。
参照リンク:
この行をonCreateメソッドに追加し、openCvManagerがインストールされていることを確認します。これはうまくいきました。
OpenCVLoader.initDebug();
アクティビティでopenCVライブラリを初期化し、onCreate()メソッドの前にこのコードを追加します
static {
if (!OpenCVLoader.initDebug()) {
// Handle initialization error
}
}
このlibをプロジェクトに追加します。 https://github.com/hschott/Camdroid
たぶん、あなたはopenCVライブラリを含めることを忘れています。
含める
static {
System.loadLibrary("opencv_Java");
}
openCVバージョン3の場合、代わりに以下を追加する必要があります。
static {
System.loadLibrary("opencv_Java3");
}
がんばろう :)