1. 程式人生 > >Android 使用OpenCV 進行書法字型重影比對

Android 使用OpenCV 進行書法字型重影比對

最近在做一個書法APP,要實現手機拍攝自己寫的字和臨帖上的字進行比對,思想就是拍攝的圖,和字貼上的圖進行想減,計算減完之後的圖上面白色畫素的多少了

1 先找到拍攝的圖片然後再對其進行處理

//先獲取Bitmap
Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uritempFile));
//轉成我們喜聞樂見的Mat格式
Mat mat_src = new Mat(bitmap.getWidth(), bitmap.getHeight(), CvType.CV_8UC4);
Utils.bitmapToMat(bitmap, mat_src); //單通道的Mat mat_gray = new Mat(bitmap.getWidth(), bitmap.getHeight(), CvType.CV_8UC1); //把圖片進行灰度化處理,並且賦值mat_gray Imgproc.cvtColor(mat_src, mat_gray, Imgproc.COLOR_BGRA2GRAY, 1); //灰度化之後,進行二值化,根據需要進行二值化反色 Imgproc.threshold(mat_gray,mat_gray,155,255,Imgproc.THRESH_BINARY);
//反色程式碼 Core.bitwise_not(mat_gray,mat_gray); //擷取mat_src上感興趣的部分 mat_src.copyTo(mat_gray,mat_gray); //Bitmap.Config.ARGB_4444這個可以透明 Bitmap bmp_dst = Bitmap.createBitmap(mat_gray.cols(), mat_gray.rows(), Bitmap.Config.ARGB_4444); Utils.matToBitmap(mat_gray, bmp_dst); //影象新增上去 img1.setImageBitmap(bmp_dst);

2 在滑動的時候也要進行實時處理
TouchImageView.OnTouchImageViewListener 這個介面

//滑動的時候要拿到當前展示的Bitmap,就用下面這個方法走就行,擷取的恰巧就是展示出來的內容。
img1.setDrawingCacheEnabled(true);
Bitmap obmp = Bitmap.createBitmap(img1.getDrawingCache());
img1.setDrawingCacheEnabled(false);
//對上面的obmp再進行處理就好了

3 Mat基本運算,兩矩陣想減
Core.absdiff(mat1,mat2,dst);
mat1和mat2做減法去絕對值,dst就是結果

下面就是介面了
這裡寫圖片描述