我使用opencv在eclipse中运行android应用程序。 我的java类:
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
public class MainActivity extends ActionBarActivity {
static
{
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CPlusPlusWrapper wrapper = new CPlusPlusWrapper();
Mat src = Highgui.imread("C:\\Users\\User1\\Desktop\\4.jpg");
Mat dst = null;
wrapper.Test(src.getNativeObjAddr(), dst.getNativeObjAddr());
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}
我的Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE:=STATIC
include C:\OpenCV-2.4.8-android-sdk\sdk\native\jni\OpenCV.mk
LOCAL_MODULE := CPlusPlusLibrary
LOCAL_SRC_FILES := CPlusPlusLibrary.cpp
LOCAL_LDLIBS += -llog -ldl
include $(BUILD_SHARED_LIBRARY)
在我使用opencv
的所有行中,我收到错误:
Caused by: java.lang.NoClassDefFoundError: org.opencv.core.Core
我做错了什么?
P.S。奇怪的是:当我评论第System.loadLibrary( Core.NATIVE_LIBRARY_NAME )
行时,程序在Highguiclass
中失败而在Mat
类中失败。
答案 0 :(得分:0)
你应该在以后开始任何与opencv相关的操作 调用onManagerConnected。因此,您的初始化应该从onCreate到onManagerConnected。
@Override
public void onResume()
{
super.onResume();
if (!InitDone)
{
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_7, this, mLoaderCallback);
InitDone = true;
}
}
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this)
{
@Override
public void onManagerConnected(int status)
{
switch (status)
{
case LoaderCallbackInterface.SUCCESS:
{
Log.i(TAG, "OpenCV loaded successfully");
// Load native library after(!) OpenCV initialization
System.loadLibrary("CPlusPlusLibrary");
// your code here....
break;
}
default:
{
super.onManagerConnected(status);
}
break;
}
}
};