1.需要提前掌握的知识
Java编程语言
JNI技术
Activity组件
Camera的具体知识
2.关于OpenCV-Android-SDK
其中包括了:
APK 有基于各种硬件平台的OpenCV Manager
Samples 各种例子
SDK 需要的各种库
3.OpenCV4Android的使用
Android应用要使用OpenCV 可以通过在自己的应用里调用OpenCV Manager,但这样就要求要安装OpenCV Manager 。另外的方法是直接调用opencv 的动态链接库,在SDK–>native–>libs目录下可以找到各个平台对应的.so文件。SDK–>java提供了相应的接口,我们可以作为Module方便的进行调用。
具体步骤参考:stackoverflow
大致示例步骤:
1. 新建一个OpenCVTest项目
在其目录下新建libraries文件。如图:
2. 添加java层的接口
1.复制SDK目录下的java文件夹到OpenCVTest的目录下,并重名命名为opensv。如图:
2.在opencv目录下新建build.gradle文件:
apply plugin: 'com.android.library'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.0.0'
}
}
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
minSdkVersion 8
targetSdkVersion 23
versionCode 2480
versionName "2.4.8"
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
res.srcDirs = ['res']
aidl.srcDirs = ['src']
}
}
}
3.在将opencv添加为module,如图:(图中我将app重命名为了OpenCVExample)
3.将OpenCV动态链接库添加进项目
在OpenCVExample–>src–>main目录下新建jniLibs文件。如图:
将SDK–>native–>libs目录下对应的平台的.so文件复制到jniLibs中,如图:
4. 验证
随便找一张图片对其进行灰度化:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
boolean result = OpenCVLoader.initDebug();
Log.d("opencv是否启动",result+"");
Mat rgbMat = new Mat();
Mat grayMat = new Mat();
Bitmap srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic);
Bitmap grayBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), Bitmap.Config.RGB_565);
Utils.bitmapToMat(srcBitmap, rgbMat);//convert original bitmap to Mat, R G B.
Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY);//rgbMat to gray grayMat
Utils.matToBitmap(grayMat, grayBitmap); //convert mat to bitmap
ImageView img = (ImageView) findViewById(R.id.image_view);
if (img == null){
return;
}
img.setImageBitmap(grayBitmap);
}
}
原图:
结果: