https://www.jianshu.com/p/6e16c0429044
一、准备
1、下载Android版本的OpenCV并解压
https://opencv.org/releases/
二、开始
1、Android Studio----新建—Android项目
模板–选择—Empty Activity; 名字例:CVProject
2、配置NDK
打开Settings—Android SDK----SDK Tools标签—选NDK和CMake—最后击OK
按照软件提示配置。
3、导入OpenCV Library
等待Gradle工作完毕------将OpenCV模块-----导入Android项目
3.1导入:File -> New -> Import Module 模块
】
3.2修复Gradle Sync错误
3.2.1导入OpenCV库–收到Gradle构建错误。
将build.gradle (:OpenCVLibrary) 中的compileSdkVersion和buildToolsVersion改成与build.gradle (:app) 中的一致
3.2.2将build.gradle (:OpenCVLibrary) 中的apply末尾的application改为library**
apply plugin: ‘com.android.application’ 改 apply plugin: ‘com.android.library’**
defaultConfig 删除 applicationId 。只有 Android 应用才能定义 applicationId ,不然编译会报错的
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation project(path: ':OpenCVLibrary')
}
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)
}
(109条消息) Android Studio各种坑爹之导入model:Library projects cannot set applicationId_kerwinJu的博客-CSDN博客 https://blog.csdn.net/kerwinJu/article/details/53053853?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.highlightwordscore&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.highlightwordscore
3.2.3 去掉applicationid "edu.ydk.opencvProject"
4、添加Dependency
5、文件复制
5.1复制—粘贴
将下载解压后的文件夹:OpenCV-android-sdk\sdk\native\libs中的所有文件夹复制到自己新建的Android工程下的app\src\main\Libs文件夹中。
E:\andriod\OpenCVproject\app\src\main\Libs
D:\OpenCV-android-sdk\sdk\native\libs 文件复制到
6、添加所需的权限 : AndroidManifest.xml中加入!
相机权限添加到–AndroidManifest.xml文件中。
提示:在Android 6及更高版本的运行时,请求相机权限。
在这里插入图片描述
7:Sample
7.1 activity_main.xml–添加图片、按钮
<Button
android:id="@+id/btn_process"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="btn_process"
tools:ignore="MissingConstraints"
tools:layout_editor_absoluteX="88dp"
tools:layout_editor_absoluteY="0dp" />
<Button
android:id="@+id/btn_rgb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="rgb"
tools:ignore="MissingConstraints" />
<ImageView
android:id="@+id/img_tyb"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitCenter"
android:src="@drawable/lena"
android:layout_centerInParent="true"/>
**7.2 ManinActivity.java–添加代码
package edu.ydk.opencvproject;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.android.Utils;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;
public class MainActivity extends AppCompatActivity {
ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
loadOpenCV();
iv = findViewById(R.id.img_tyb);
Button btn_process = findViewById(R.id.btn_process);
btn_process.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.lena);
Mat src = new Mat();
Mat dst = new Mat();
Utils.bitmapToMat(bitmap,src);
Imgproc.cvtColor(src,dst, Imgproc.COLOR_BGR2GRAY);
Utils.matToBitmap(dst,bitmap);
iv.setImageBitmap(bitmap);
src.release();
dst.release();
}
});
Button btn_rgb = findViewById(R.id.btn_rgb);
btn_rgb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.lena);
iv.setImageBitmap(bitmap);
}
});
}
private void loadOpenCV(){
boolean success = OpenCVLoader.initDebug();
if(success){
Toast.makeText(getApplicationContext(), "加载 OpenCV Libraries 成功!", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getApplicationContext(), "加载 OpenCV Libraries 失败!", Toast.LENGTH_SHORT).show();
}
}
}