IDE : Android Studio 3.3 (以下簡稱AS)
opencv android sdk : 3.3.0 (官方連結)
1. 下載下來解壓縮
2. 在AS內 : File -> New -> New Module -> 拉到下面選擇 Import Eclipse ADT Project -> Next
3. Source directory的地方填入剛剛解壓縮完的 (....\OpenCV-android-sdk\sdk\java) , 下面的Module name會自動填入 -> Next -> Finish
4. 這裡遇到的錯誤點擊 Affected Modules: openCVLibrary330 -> 註解掉 "uses-sdk android:minsdkversion="8" android:targetsdkversion="21" -> Try Again
5. 在src/main下面新增一個叫 jniLibs 的資料夾
6. 將opencv android sdk (....\OpenCV-android-sdk\sdk\native\libs\)這個路徑裡面的 armeabi-v7a(一般手機)、x86_64(模擬器) 放進jniLibs裡面
7. 將opencvlibrary330裡的build.gradle和app的build.gradle ,compileSdkVersion , minSdkVersion,targetSdkVersion要相同
8. 這樣opencv就載入了,再來就是用函式庫寫個demo
ex. 放個按鈕,按一下轉灰階,再按一下變原圖
layout只是個ImageView + Button 這裡就不放上來了
主要程式碼如下 :
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
Button button;
ImageView imageView;
Bitmap srcBitmap,grayBitmap;
boolean flag = false;
static {
System.loadLibrary("opencv_java3");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.button);
imageView = findViewById(R.id.imageView);
button.setOnClickListener(this);
proc();
}
@Override
public void onClick(View v) {
if(v == button){
if(!flag) {
imageView.setImageBitmap(grayBitmap);
flag = true;
button.setText("GRAY");
}else{
imageView.setImageBitmap(srcBitmap);
flag = false;
button.setText("RAW");
}
}
}
public void proc(){
Mat rgbMat = new Mat();
Mat grayMat = new Mat();
srcBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.photo);
grayBitmap = Bitmap.createBitmap(srcBitmap.getWidth(),srcBitmap.getHeight(),Bitmap.Config.RGB_565);
Utils.bitmapToMat(srcBitmap,rgbMat);
Imgproc.cvtColor(rgbMat,grayMat,Imgproc.COLOR_RGB2GRAY);
Utils.matToBitmap(grayMat,grayBitmap);
}
}
// 這一段主要是抓取jniLibs裡的lib (libopencv_java3.so) ,所以跑的機器如果沒有相對應的版本就會拋錯
static {
System.loadLibrary("opencv_java3");
}
//呼叫opencv函式庫,如果第一次使用,需要在紅線的地方 Alt + Enter IDE會自動載入opencv (在build.gradle -> dependencies會發現implementation project(path: ':openCVLibrary330') ,載入後再 Alt + Enter一次import function即可
public void proc(){
Mat rgbMat = new Mat();
Mat grayMat = new Mat();
srcBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.photo);
grayBitmap = Bitmap.createBitmap(srcBitmap.getWidth(),srcBitmap.getHeight(),Bitmap.Config.RGB_565);
Utils.bitmapToMat(srcBitmap,rgbMat);
Imgproc.cvtColor(rgbMat,grayMat,Imgproc.COLOR_RGB2GRAY);
Utils.matToBitmap(grayMat,grayBitmap);
}
Source Code : https://github.com/tks3589/BloggerCode/tree/master/android/opencvBlog
沒有留言:
張貼留言