Android Studio 配置OpenCV4.4.0 ,说来惭愧居然用户礼拜天2天的时间呢,期间遇到的问题大致有4个问题
这里我也总结出了最后在列举出来,(可能是新版和之前旧版本不一样的问题按照网上的配置运行总是报错)
这里默认我们的电脑上安装的有android studio 并且配置好了ndk 环境。
如果ndk 没有配置可以点击查看ndk 环境配置
1 首先到OpenCV 官网上点击Releases 下载 库文件
点击进去点击Releases
然后我们在OpenCV4.4.0 选中android
下载之后打开目录是这样的
samples 里面 是官方的demo
sdk 是我们要使用的库
下载之后,我们新建一个demo,然后把sdk 导入进入,这里啰嗦下网上的教程是导入sdk 里面的java并吧java文件改成库 然后在新建一个jniLibs,之后再把sdk\native\libs 里面的包放进入,最后在gradle 中配置下,然后配置好之后运行也没有问题但是调用的时候报错呢问题也是百度了2天没有处理好,最后打开了sdk 里面的build.gradle 看下配置这个sdk 本身就是一个库,为啥网上非要进入sdk里面的java,然后在修改成库,最后自己想着直接引入sdk 试试看运行成功了
啰嗦了一会,这个可能是版本的问题之前的人都成功了,现在OpenCV4.4.0 人家优化了不用这么麻烦了
在新建的项目中引入库sdk
File --- new -- Import Module
之后就是
加载一会就好了,加载之后的效果图如下
接着就是验证是否可以了在onResume 写入OpenCVLoader.initDebug() 具体如下
if (OpenCVLoader.initDebug()) {
Log.d(TAG, "OpenCV library found inside package. Using it!");
} else {
Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");
}
之后就是看打印结果了
ok 到这里我们就配置完了, 说白了就是一个库我们下载好了,然后引入到项目这样就好了,居然弄了2天,太难了
下面写一个是图片边灰色的demo 试试OpenCV
具体效果如下图
布局代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="fitXY" />
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点击变为灰色图片"/>
</LinearLayout>
java 代码
public class MainActivity extends AppCompatActivity {
private final String TAG = "MainActivity";
private ImageView imageView;
private Button button;
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS: {
Log.i(TAG, "OpenCV loaded successfully");
}
break;
default: {
super.onManagerConnected(status);
}
break;
}
}
};
@Override
public void onResume() {
super.onResume();
if (OpenCVLoader.initDebug()) {
Log.d(TAG, "OpenCV library found inside package. Using it!");
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
} else {
Log.d(TAG,
"Internal OpenCV library not found. Using OpenCV Manager for initialization");
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION, this, mLoaderCallback);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = findViewById(R.id.img);
button = findViewById(R.id.btn);
final Bitmap bitmap =
((BitmapDrawable) getResources().getDrawable(R.mipmap.image)).getBitmap();
imageView.setImageBitmap(bitmap);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Bitmap grayBitmap = toGrayByOpencv(bitmap);
imageView.setImageBitmap(grayBitmap);
}
});
}
public Bitmap toGrayByOpencv(Bitmap srcBitmap) {
Mat mat = new Mat();
Utils.bitmapToMat(srcBitmap, mat);
Mat grayMat = new Mat();
Imgproc.cvtColor(mat, grayMat, Imgproc.COLOR_BGRA2GRAY, 1);
Utils.matToBitmap(grayMat, srcBitmap);
return srcBitmap;
}
}
ok 到此终于完成了,由于 配置的问题 出现的几个问题这里列举出来
1 OpenCV error: Cannot load info library for OpenCV
2 运行是弹框提示安装OpenCV Manager :
OpenCV Manager package was not found Try to install it?
弹框如下
3 黄色警告libc++_shared.so" not found :
System.err: java.lang.UnsatisfiedLinkError: dlopen failed: library "libc++_shared.so" not found
安装上面的配置之后三个问题就不再提示了
如果安装上面的配置失败了可以下载demo看看效果