編輯:關於Android編程
KqwOpenCVBlurDemo
阈值化是一種將我們想要在圖像中分析的區域分割出來的方法。
我們把每個像素值都與一個預設的阈值做比較,再根據比較的結果調整像素值。
類似這樣
Imgproc.threshold(src,src,100,255,Imgproc.THRESH_BINARY);
其中100是阈值,255是最大值(純白色的值)。
上述的阈值化是全局性的,我們也可以根據鄰域像素為任意像素計算阈值。
自適應阈值用到的3個參數
自適應方法
Imgproc.ADAPTIVE_THRESH_MEAN_C:阈值是鄰域像素的值 Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C:阈值是領域像素的加權和,權重來自高斯核塊尺寸
鄰域的大小
常量C
從對每個像素計算得到的均值或加權均值減去的常量
圖像置灰
Imgproc.cvtColor(src, src, Imgproc.COLOR_BGR2GRAY);
自適應阈值化
Imgproc.adaptiveThreshold(src, src, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 3, 0);
這裡我用到了RxJava。主要是因為圖片處理是耗時操作,會阻塞線程,為了防止界面卡頓,這裡使用RxJava進行了線程切換。
/** * 自適應阈值 * * @param bitmap 要處理的圖片 */ public void adaptiveThreshold(Bitmap bitmap) { // 使用RxJava處理圖片 if (null != mSubscriber) Observable .just(bitmap) .map(new Func1() { @Override public Bitmap call(Bitmap bitmap) { // Bitmap轉為Mat Mat src = new Mat(bitmap.getHeight(), bitmap.getWidth(), CvType.CV_8UC4); Utils.bitmapToMat(bitmap, src); // 圖像置灰 Imgproc.cvtColor(src, src, Imgproc.COLOR_BGR2GRAY); // 自適應阈值化 Imgproc.adaptiveThreshold(src, src, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 3, 0); // 二值阈值化 // Imgproc.threshold(src,src,100,255,Imgproc.THRESH_BINARY); // 阈值化到零 // Imgproc.threshold(src,src,100,255,Imgproc.THRESH_TOZERO); // 截斷阈值化 // Imgproc.threshold(src,src,100,255,Imgproc.THRESH_TRUNC); // 反轉二值阈值化 // Imgproc.threshold(src,src,100,255,Imgproc.THRESH_BINARY_INV); // 反轉阈值化到零 // Imgproc.threshold(src,src,100,255,Imgproc.THRESH_TOZERO_INV); // Mat轉Bitmap Bitmap processedImage = Bitmap.createBitmap(src.cols(), src.rows(), Bitmap.Config.ARGB_8888); Utils.matToBitmap(src, processedImage); return processedImage; } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(mSubscriber); }
// 圖片處理的工具類 mBlurUtil = new BlurUtil(new Subscriber() { @Override public void onCompleted() { // 圖片處理完成 dismissProgressDialog(); } @Override public void onError(Throwable e) { // 圖片處理異常 dismissProgressDialog(); } @Override public void onNext(Bitmap bitmap) { // 獲取到處理後的圖片 mIvImageProcessed.setImageBitmap(bitmap); } }); // 自適應阈值 mBlurUtil.adaptiveThreshold(mSelectImage);
gradle lintgradle中有lint任務,可以直接執行lint靜態代碼檢查,但是前提是你的build.gradle設置了lintOptions選項
近日,微信悄然上線了個人公眾號改名功能,據悉,微信在原賬號名稱下方會有一行“個人類賬號一年內可主動修改一次名稱”的標注,每年只有一次
ProgressDialog的基本用法ProgressDialog為進度對話框。android手機自帶的對話框顯得比較單一,我們可以通過ProgressDialog來自己
在Android開發中,我們經常會用到對商家或者商品的評價,運用星星進行打分。然而在Android系統中自帶的打分控件,RatingBar特別不好用,間距和大小無法改變。