我正在使用OpenCV4Android版本2.4.10,並在三星Galayx GT-I9300上測試我的代碼。我的問題是,我必須從Play商店下載Opencv管理器,以便我的opencv代碼能夠運行,否則應用程序無法啓動。 我提到了一些postes「How to integrate OpenCV Manager in Android App」,知道如何在android上運行opncv代碼,而無需下載OpenCV管理器 ,但不幸的是,只要未安裝OpenCV管理器,該應用程序無法啓動。如何在沒有OpenCv管理器的情況下運行OpenCV代碼
我試過follwoing
static {
if (!OpenCVLoader.initDebug()) {
// Handle initialization error
}
}
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
Log.i(TAG, "OpenCV loaded successfully");
mOpenCvCameraView.enableView();
} break;
default:
{
super.onManagerConnected(status);
} break;
}
}
};
...
...
...
@Override
public void onResume() {
super.onResume();
Log.w(TAG, "onResume");
if (!OpenCVLoader.initDebug()) {
Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_10, getActivity(), mLoaderCallback);
} else {
Log.d(TAG, "OpenCV library found inside package. Using it!");
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
}
但這並沒有解決問題。 請讓我知道如何在沒有下載Opencv管理器的情況下在android上運行opencv代碼?
更新:
使用initAsync的:
請你提供一個示例演示如何使用 「initAsync()」 中的應用程序的生產版本?因爲我試圖這樣做,但當然我不能在靜態塊中使用它,因爲「intiAsync」的簽名如下所示:「OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_10,this,mLoaderCallback);」我不能使用「this」關鍵字,也不是靜態塊
public class MainActivity extends AppCompatActivity {
static {
//OpenCVLoader.initDebug();
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_10, this, mLoaderCallback); //this keyword and "mLoaderCallback" are not defined in this scope
}
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS: {
Log.i("MainActivity", "OpenCV loaded successfully");
}
break;
default: {
super.onManagerConnected(status);
}
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Mat m = new Mat(100, 100, CvType.CV_8UC4);
Log.d("MainActivity", "m.width()" + m.width());
Log.d("MainActivity", "m.height()" + m.height());
}
}
謝謝您的回答和你的努力..我只是混淆生產版本和調試版本! ..regarding我正在開發包含opencv代碼的應用程序是它的調試版本還是生產版本?請諮詢 – user2121
編輯... @ user2121 – ZdaR
非常感謝您的詳細答案..但請耐心等待,我仍然有一個問題,請......如你在更新的答案中提到的 - 「所以建議加載OpenCV在後臺可以使用initAsync()實現 - 「爲什麼不總是使用」initAsync()「而不是」initDebug()「? – user2121