下载opencv库文件
首先下载opencv-3.4.1-android-sdk.zip并解压
网址 https://opencv.org/opencv-3-4-1.html
新建安卓app工程
改写activity_main.xml布局文件加入一个按钮和图片
图片需放入drawable目录
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button"
android:text="测试opencv"/>
<ImageView
android:id="@+id/imageview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:src="@drawable/lena"/>
导入opencev
file->new->import module
填写opencv路径我的是
E:\opencv android\opencv-3.4.1-android-sdk\OpenCV-android-sdk\sdk\java
添加依赖
file->project structure
加号添加module dependency
更改opencv的build.gradle
apply plugin: 'com.android.library'
android {
compileSdkVersion 14
buildToolsVersion "26.0.2"
defaultConfig {
minSdkVersion 8
targetSdkVersion 21
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
改成
apply plugin: 'com.android.library'
android {
compileSdkVersion 26
buildToolsVersion "26.0.2"
defaultConfig {
minSdkVersion 15
targetSdkVersion 26
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
复制文件
E:\opencv android\opencv-3.4.1-android-sdk\OpenCV-android-sdk\sdk\native\libs
将上面目录下的所有文件复制到libs文件夹内
修改mainactivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
staticLoadCVLibrary();
Button btn=findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
convert2gray();
}
});
}
private void staticLoadCVLibrary(){
boolean load= OpenCVLoader.initDebug();
if (load){
Log.i("cv","Open CV Libraries loaded...");
}
}
private void convert2gray(){
Mat src= new Mat();
Mat temp=new Mat();
Mat dst=new Mat();
Bitmap image= BitmapFactory.decodeResource(this.getResources(),R.drawable.lena);
Utils.bitmapToMat(image,src);
Imgproc.cvtColor(src,temp,Imgproc.COLOR_RGBA2BGR);
Log.i("cv","image type:"+(temp.type() == CvType.CV_8UC3));
Imgproc.cvtColor(temp,dst,Imgproc.COLOR_BGR2GRAY);
Utils.matToBitmap(dst,image);
ImageView imageView=findViewById(R.id.imageview);
imageView.setImageBitmap(image);
src.release();
temp.release();
dst.release();
}
}
修改app的build.gradel 加入下面代码 注意不要忘记dependencies第二行
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation fileTree(dir: "$buildDir/native-libs",includes: 'native-libs.jar')
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
implementation project(':openCVLibrary341')
}
task nativeLibsToJar(type: Jar, description: 'create a jar archive of the native libs') {
destinationDir file("$buildDir/native-libs")
baseName 'native-libs'
from fileTree(dir: 'libs', include: '**/*.so')
into 'lib/'
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn(nativeLibsToJar)
}
到此已经可以编译工程进行测试了,效果图如下