我正在使用 OpenCV 库 2.4.9。为了初始化 OpenCv 库,我使用了调用
OpenCvLoaded.initDebug()
但是这个调用产生了很多日志语句。我找不到像 OpenCvLoaded.initRelease() 这样的东西。此外,当我使用以下代码时
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS: {
}
break;
default: {
super.onManagerConnected(status);
}
break;
}
}
};
我得到了错误
Unable to start activity ComponentInfo{myclass}: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=org.opencv.engine.BIND }
如何删除那些日志语句。我正在 android L 上构建我的应用程序。我的最小 sdk 是 21。
最佳答案
据我所知,目前有两种方法可以让 OpenCV 与 Android 5.0(“Lollipop”)一起工作。
- 最简单的方法:在项目的
build.gradle
中设置targetSdkVersion 19
(因为您的最低 sdk 版本是 21,所以您还必须设置minSdkVersion 19
或更少)。 - 但如果您必须使用 Android 5.0 版,则上述解决方法对您不起作用。相反,您可以导入 Android OpenCV sources作为项目中的模块,将主应用程序项目设置为依赖于它,以及
调整 OpenCV 文件
src/main/java/org/opencv/android/AsyncServiceHelper.java
如下:
将方法 createExplicitFromImplicitIntent
(see the link 上面给出的 FoggyDay)添加到 AsyncServiceHelper
类。
然后将 AsyncServiceHelper
类的 initOpenCV
方法修改为:
public static boolean initOpenCV(String Version, final Context AppContext,
final LoaderCallbackInterface Callback)
{
AsyncServiceHelper helper = new AsyncServiceHelper(Version, AppContext, Callback);
Intent expIntent = createExplicitFromImplicitIntent(AppContext, new Intent("org.opencv.engine.BIND"));
if (AppContext.bindService(expIntent,
helper.mServiceConnection, Context.BIND_AUTO_CREATE))
{
return true;
}
else
{
AppContext.unbindService(helper.mServiceConnection);
InstallService(AppContext, Callback);
return false;
}
}
最后不要忘记添加必要的导入:
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import java.util.List;
至于日志消息泛滥,另一种停止这些行输出的方法...
02-01 02:25:10.489 29887-29998/com.ABC.opencv_someapp D/CameraBridge? mStretch value: 1.125
02-01 02:25:10.521 29887-29887/com.ABC.opencv_someapp D/JavaCameraView? Preview Frame received. Frame size: 1843200
...可以将 OpenCV 源代码包含到您的项目中,如上图所示,然后在以下文件中删除或注释这些行:
src/main/java/org/opencv/android/CameraBridgeViewBase.java line 408: Log.d(TAG, "mStretch value: " + mScale);
和
src/main/java/org/opencv/android/JavaCameraView.java line 276: Log.d(TAG, "Preview Frame received. Frame size: " + frame.length);
关于java - 如何在 android L 上加载 OpenCV 时删除日志记录语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28104022/