2016年6月14日 星期二

OpenCV圖像模糊與銳化



    Code:
            Mat footMat = new Mat();
            Mat dstM = new Mat();
            Utils. bitmapToMat(footbm, footMat);
    Imgproc. GaussianBlur(footMat, dstM, new Size(21,21), 11, 11);
    Bitmap bm = Bitmap. createBitmap(footMat.cols(), footMat.rows(),Bitmap.Config.ARGB_8888 );
            Utils. matToBitmap(dstM, bm);
      
    5.新增完程式碼後,將最後一段程式碼中的ImageView1改成ImageView2,括弧中的footbm改為bm

      1.xml描述檔說明

      android:layout_width="wrap_content"
    • wrap_content的意思是根據組件的內容自動調整組件大小

      android:layout_below="@+id/textView1"
    • 此段敘述表示該物件會在"textView1"的相對位置下方

      android:layout_centerHorizontal="true"
    • 此段敘述的效果為水平置中

      android:maxHeight="100dp"
    • 設定最大高度

      android:maxWidth="100dp"
    • 設定最大寬度

      android:src="@drawable/cat "
    • 讀取圖片"cat"

      2.MainActivity.java程式碼註解

      // 宣告opencv mat
              Mat footMat = new Mat();
              Mat dstM = new Mat();
      // 將 bmp轉為 mat格式
              Utils. bitmapToMat(footbm, footMat);
      // 對mat做高斯模糊
              Imgproc. GaussianBlur(footMat, dstM, new Size(21,21), 11, 11);
      // 宣告另一個bmp 將處理好的mat轉到新的bmp
              Bitmap bm = Bitmap. createBitmap(footMat.cols(), footMat.rows(),Bitmap.Config.ARGB_8888 );
              Utils. matToBitmap(dstM, bm);
      其中「對mat做高斯模糊」的部分,只要更改Size(21,21)中的數字ex:(41,41),就可以調整圖像改變效果的程度(銳化也是一樣),要注意的是數字必須為奇數,數值越大效果越明顯
      其中的原理請參考OpenCV官方文件高斯模糊Filter

沒有留言:

張貼留言