tôi đang sử dụng opencv trong android. nhưng khi tôi thêm Mat() vào mã của tôi, ứng dụng của tôi đột ngột dừng sau khi khởi chạy. log lỗi của tôi là như sau:UnsatisfiedLinkError: n_Mat trong khi sử dụng opencv2.4.3 với android 4.0
FATAL EXCEPTION: main
java.lang.UnsatisfiedLinkError: n_Mat
at org.opencv.core.Mat.n_Mat(Native Method)
at org.opencv.core.Mat.<init>(Mat.java:441)
at com.example.imagepro.MainActivity.onCreate(MainActivity.java:36)
at android.app.Activity.performCreate(Activity.java:4465)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
at android.app.ActivityThread.access$600(ActivityThread.java:123)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)`
mã của tôi là
import java.io.File;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.core.Mat;
import org.opencv.android.Utils;
import org.opencv.imgproc.Imgproc;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView;
public class MainActivity extends Activity {
final String TAG = "Hello World";
Mat imgToProcess;
private BaseLoaderCallback mOpenCVCallBack = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
Log.i(TAG, "OpenCV loaded successfully");
// Create and set View
setContentView(R.layout.activity_main);
} break;
default:
{
super.onManagerConnected(status);
} break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.i(TAG, "onCreate");
super.onCreate(savedInstanceState);
Log.i(TAG, "Trying to load OpenCV library");
if (!OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mOpenCVCallBack))
{
Log.e(TAG, "Cannot connect to OpenCV Manager");
}
else{ Log.i(TAG, "opencv successfully added"); }
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String path = Environment.getExternalStorageDirectory()+ "/Koala.jpg"; // get image from sd card
File imgFile = new File(path);
View v = null;
if(imgFile.exists())
{
Bitmap myBitmap = BitmapFactory.decodeFile(path);
ImageView myImage = (ImageView) findViewById(R.id.imageView);
myImage.setImageBitmap(myBitmap);
Log.i(TAG, "opencv successfull 1");
Mat imgToProcess = new Mat();
Mat newmat = new Mat();
Utils.bitmapToMat(myBitmap, imgToProcess);
Imgproc.cvtColor(imgToProcess, newmat, Imgproc.COLOR_RGB2GRAY);
Bitmap outImage = Bitmap.createBitmap(newmat.rows(),newmat.cols(),Bitmap.Config.ARGB_8888);
Utils.matToBitmap(newmat, outImage);
myImage.setImageBitmap(outImage);
}
}
}
tôi đã cố gắng giải pháp khác được cung cấp trên stackoverflow nhưng không ai trong số họ làm việc cho tôi. tôi đã sao chép libopencv_java.so và libopencv_info.so vào thư mục/libs của tôi từ F: \ OpenCV-2.4.3.2-android-sdk \ sdk \ native \ libs \ armeabi-v7a nhưng lỗi này vẫn giữ nguyên.
vui lòng trợ giúp.
cảm ơn trước :)
Kiểm tra câu hỏi [tại đây] (http://stackoverflow.com/questions/11614227/android-unsatisfiedlinkerror-with-opencv-2-4-2). Tôi đã có những vấn đề tương tự và đã phân lập vấn đề với dòng: Mat m = new Mat(); Mat m = null; và Mat m; nhưng tôi không cần chúng. Dù sao, hãy thử [link] (http://stackoverflow.com/questions/11614227/android-unsatisfiedlinkerror-with-opencv-2-4-2) Tôi đã cho bạn. nó làm việc cho tôi. –
cảm ơn phản hồi của bạn ... nhưng tôi cũng đã thử điều đó. tôi đã liên kết với opencv lib và khởi tạo nó. Nhưng hôm qua tôi đã giải quyết vấn đề này sau khi gỡ lỗi quá nhiều ... vấn đề là tôi đã gọi hàm opencv phụ thuộc của tôi trong oncreate(). nhưng tôi gỡ bỏ nó từ đó và gọi nó trong onmanagerconnected() sau khi setcontentview(), nó bắt đầu hoạt động. tôi nghĩ rằng khởi tạo opencv lib diễn ra sau khi tạo trong onmanagerconnected(). tôi mới trong lĩnh vực này nên không biết điều đó. – AnShU
@AnShU, bạn có thể đăng câu trả lời và chấp nhận nó không? Tôi muốn xem mã mà bạn đã đặt mã khởi tạo của mình. –