Android 使用OpenCV 進行書法字型重影比對
阿新 • • 發佈:2018-11-12
最近在做一個書法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就是結果
下面就是介面了