編輯:關於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);
Android靜態代碼檢查-Lint
gradle lintgradle中有lint任務,可以直接執行lint靜態代碼檢查,但是前提是你的build.gradle設置了lintOptions選項
微信個人公眾號怎麼改名字 微信個人公眾號改名字教程
近日,微信悄然上線了個人公眾號改名功能,據悉,微信在原賬號名稱下方會有一行“個人類賬號一年內可主動修改一次名稱”的標注,每年只有一次
Android 自定義ProgressDialog進度條對話框用法詳解
ProgressDialog的基本用法ProgressDialog為進度對話框。android手機自帶的對話框顯得比較單一,我們可以通過ProgressDialog來自己
Android自定義View之自定義評價打分控件RatingBar實現自定義星星大小和間距
在Android開發中,我們經常會用到對商家或者商品的評價,運用星星進行打分。然而在Android系統中自帶的打分控件,RatingBar特別不好用,間距和大小無法改變。