顯示具有 1052055 標籤的文章。 顯示所有文章
顯示具有 1052055 標籤的文章。 顯示所有文章

2019年6月4日 星期二

s1052055的作業5

一、作業要求
請撰寫一個程式,利用數學型態學影像處理運算,計算出所附圖像(共三張)每張圖像中圍棋個數。
a. 請在部落格呈現經由數學型態學影像處理運算後的圖像,同時要呈現你程式輸出棋子數量的螢幕截圖。
b. 程式不一定可以算出正確棋子數量,越接近正確答案越好!

二、執行環境
 Windows 10
 Visual Studio 2017
 OpenCV 3.4

三、實作方法
1.使用imread("檔案名稱",0) 以灰階方式讀入圖片檔
2.使用resize() 將圖片長寬變成640x480
3.使用threshold() 二質化
4.使用Mat erodeStruct = getStructuringElement(MORPH_RECT, Size(15, 15)) 建立erode區塊
5.將圖片作erode()和dilate()兩次,找出黑棋範圍
6.使用GaussianBlur()去除圖片雜訊
7.使用Canny()進行邊緣檢測
8.使用findContours()尋找黑棋輪廓
9.使用contours.size()取得輪廓數量
四、執行結果



2019年5月14日 星期二

s1052055的作業4

一、作業說明:

      利用你所學的顏色的知識,撰寫一個程式來偵測一張輸入照片中的皮膚區域並將其標示出。 

二、實作環境:
        Windows 10
        Visual Studio 2017
        OpenCV 3.4

三、執行方法
  1. 將原圖讀入
  2. 設定YCbCr的膚色範圍
  3. 使用cvtColor()把圖片中RGB的值轉換成YCbCr
  4. 然後使用inRange()進行皮膚的偵測
  5. 將符合皮膚範圍的填白色,不符合填黑色(皮膚較黑的人或是相近於批膚色的東西效果較不明顯)
  6. 輸出結果
四、執行結果:

              原圖                                       結果(相近皮膚區域)

2019年5月10日 星期五

s1052055的作業3

離散傅立葉轉換DFT練習

題目:

讀取一張256色灰階圖像,計算輸入圖的離散傅立葉轉換結果,並將頻譜大小跟相位角度各以灰階256色圖像方式呈現出

使用環境:

Windows 10
Visual Studio 2017
OpenCV 3.4

執行方式



1.讀入照片
2.使用copyMakeBorder()來對影像邊界拓展
3.透過merge()來拓展通道
4.透過dft()來對圖片做傅立葉轉換
5.用split分開雙通道一個通道為實部一個為虛部
6.將區塊重排,讓原點在影像的中央
7.交换象限
8.將頻譜圖透過normalize()轉換為可圖的圖像格式
9.使用phase()來計算相位
10.再將相位圖透過normalize()轉換為可圖的圖像格式


執行結果

              原圖                          spectrum                     phase angle

2019年3月29日 星期五

1052055,作業二

題目:

撰寫一個程式,讀取一張256 色灰階圖像或 RGB 全彩圖像(.bmp 或.jpg 圖像格式都可) ,利用Sobel Operators 偵測圖像邊緣,並以邊緣偵測為基礎(如彩色圖像針可先將圖片 由 RGB 轉換至HIS 或 YUV, YCbCr 等色彩空間,只需對亮度 Channel I 或 Y 處理,再 轉回 RGB 即可),設計一個類似素描線條自畫像程式。(如果可以分析邊緣偵測所得到 的點,結合成線條方式呈現更佳!)

使用環境:

Windows 10
Visual Studio 2017
OpenCV 3.4


執行方式


1. 透過Sobel() 分別對影像進行水平及垂直的運算,並得到X&Y的一階梯度
2. 使用convertScaleAbs() 轉成無正負號的8位元圖
3. 使用addWeighted() 將水平及垂直的影像結果結合


執行結果
















     左圖為原始圖 右圖為最後結果

2019年3月13日 星期三

1052055作業一


作業1 OpenCV基礎程式練習 

撰寫一個程式從檔案讀取一張圖像,將圖像的每一個點像素的值各加上一個整數值 v (-255 ≤ v ≤ 255),並將圖像儲存至一個新圖像檔案中。

一、實作方法:
1.image=imread("1.jpg", CV_LOAD_IMAGE_GRAYSCALE);//load檔案並以灰階圖檔方式載入
2.cin>>s;//使用者輸入數值 v (-255 ≤ v ≤ 255)
3.int image_col = image.cols*image.channels();//取得影像寬度
int image_row = image.rows;//取得影像高度
4.使用雙層迴圈讀取每個pixel值:image.at<uchar>(i, j);//讀取pixel值
5.pixel=image.at<uchar>(i, j);//將該pixel值佔存
6.pixel+=s;//對每個pixel值加一個數值
7.image.at<uchar>(i, j)=pixel;//將改變後的數值存回去
8.imwrite("new.jpg", image);//存影像
二、使用平台:
Visual Studio 2017 + OpenCV 3.4 撰寫。

三、執行結果:
   
               (a)使用者輸入100,左邊是原圖,右邊則是每個pixel+100後的結果
                     
               (b)使用者輸入-175,左邊是原圖,右邊則是每個pixel-175後的結果
                    
               (c)使用者輸入-100,左邊是原圖,右邊則是每個pixel-100後的結果