-
wrap_content的意思是根據組件的內容自動調整組件大小
操作影片:
影片連結一、實際操作
1.延續前面讀圖的程式,首先拉一個TextView到畫面的中間,並改名為”Result”,可在畫面右側屬性(Properties)Text的地方修改或是透過xml描述檔修改名稱
2.再拉一個ImageView到畫面下方,出現對話視窗點OK
連點兩下新增的ImageView進入xml描述檔,將ImageView2的程式碼改寫為:
<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView2"
android:layout_centerHorizontal="true"
android:maxHeight="100dp"
android:maxWidth="100dp" />
3.另外在ImageView1最後面加上一行程式碼:
android:src="@drawable/cat "
4.進入到MainActivity.java,前面已經加入讀圖的程式碼,現在要改寫成具有模糊效果的程式,將新的程式碼鍵入圖片中紅色箭頭處,即兩段程式碼的中間
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
6.一切準備就緒後,就可以開始run程式囉! (在啟動AVD模擬器之前請先ctrl+s儲存專案)
圖像模糊程式執行結果如圖:
7.圖像模糊執行成功後,讓我們來試試看銳化的功能吧!先打開MainActivity.java,在圖片中紅色箭頭處加上一行程式碼:
Core.addWeighted(footMat, 1.5, dstM, -0.5, 0, dstM);
8.再重新run一次程式看看,現在圖像已經從原本的模糊改成銳化效果囉!
(在啟動AVD模擬器之前請先ctrl+s儲存專案)
二、課程講解
1.xml描述檔說明
android:layout_width="wrap_content"
-
此段敘述表示該物件會在"textView1"的相對位置下方
-
此段敘述的效果為水平置中
-
設定最大高度
-
設定最大寬度
-
讀取圖片"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
沒有留言:
張貼留言