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

2019年6月6日 星期四

s1051531的作業5

一、作業要求:

撰寫一個程式,利用數學型態學影像處理運算,計算出所附圖像(共三張)每張圖像中 圍棋個數。

a. 請在部落格呈現經由數學型態學影像處理運算後的圖像,同時要呈現你程式輸出棋子數量的螢幕截圖。
b. 程式不一定可以算出正確棋子數量,越接近正確答案越好!

二、使用環境:

  • windows10
  • Visual Studio 2017
  • python 3.6
  • opencv-python 4.1.0

三、特殊程式片段:

  • threshold(): 將圖片二值化(呈現黑白)
  • getStructuringElement(): 設置侵蝕或膨脹的模板
  • erode(): 侵蝕
  • dilate(): 膨脹
  • Canny(): 找邊緣
  • findContours(): 尋找輪廓
  • drawContours(): 將找到的輪廓畫在原圖上做比較

四、執行結果:

先選擇要計算哪張圖,然後先對圖進行二值化,再進行一次的侵蝕,去除棋子裡一些太小的反光點,之後藉由多次膨脹棋子裡較大的反光點,讓棋子剩下的黑色部分分開。

然後藉由Canny()將邊緣找出來,用findContours()將邊緣歸類為輪廓後計算數量,最後用drawContours()在原圖上畫出輪廓來比較找到哪些輪廓。




圖1、 侵蝕及膨脹後的圖(左);輪廓圖(右)
正確: 24,計算出25個,誤差 +1



圖2、侵蝕及膨脹後的圖(左);輪廓圖(右)
正確: 31,計算出29個,誤差 -2



圖3、侵蝕及膨脹後的圖(左);輪廓圖(右)
正確: 31,計算出31個,誤差 0


離開程式

2019年5月16日 星期四

s1051531的作業4


一、作業要求:

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

二、使用環境:

  • windows10
  • Visual Studio 2017
  • python 3.6
  • opencv-python 4.1.0
  • Matplotlib 3.0.3
  • numpy 1.16.3

三、特殊程式片段:

  • cv2.cvtColor(): 分別將圖片轉成YCrCb、HSV
  • img.item(): 分別取出img的值
  • img.itemset(): 將img的值設為0(不是皮膚的部分)

四、執行結果:


以範例1來說,HSV的效果比YCrCb來的要好,範例1的YCrCb比較不能準確區分膚色和黃色的差別。
而範例2則是YCrCb效果比HSV好,YCrCb能偵測到比較完整的人臉或皮膚的部分,HSV則是有一些缺漏。




執行程式

範例1 原圖
範例1 HSV
範例1 YCrCb

範例2 原圖
範例2 HSV
範例2 YCrCb



輸出結果並保存

2019年5月11日 星期六

s1051531的作業3

一、作業要求:

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

二、使用環境:

  • windows10
  • Visual Studio 2017
  • python 3.6
  • opencv-python 4.1.0
  • Matplotlib 3.0.3
  • numpy 1.16.3

三、特殊程式片段:

  • cv.dft(): 離散傅立葉轉換
  • np.fft.fftshift(): 移頻操作
  • cv2.magnitude():  求出頻譜圖
  • cv2.phase(): 求出相位圖

四、執行結果:

用灰階方式讀入一張圖檔後,顯示其頻譜圖及相位圖,按下存檔按鈕儲存圖片。
執行結果(左-原圖 中-頻譜圖 右-相位圖)

存檔按鈕

儲存圖片

2019年4月2日 星期二

s1051531的作業2

一、作業要求:

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

二、使用環境:

  • windows10
  • Visual Studio 2017
  • opencv-3.4.

三、特殊程式片段:

  • GaussianBlur(): 高斯平滑去除雜訊
  • Sobel(): 分別對x、y軸進行計算
  • convertScaleAbs():  把圖像轉成CV_8U
  • addWeighted(): 將垂直及水平分配權重並結合

四、實作方法:

讀入一張圖檔後,先利用高斯平滑去除雜訊,再利用Sobel()分別計算x、y軸進行運算得到像素的梯度,使用Sobel()時,為了避免發生saturate,所以通常輸入圖的深度為CV_8U,輸出圖深度會使用CV_16S,因此之後需要用convertScaleAbs()把圖像轉回CV_8U,最後利用addWeighted()將垂直及水平分配權重並結合成最後的線條圖。

五、執行畫面:

執行畫面(左原圖,右線條圖)

線條圖存檔成output.jpg


2019年3月18日 星期一

s1051531的作業一

一、作業要求:

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


二、使用環境:
   windows10、Visual Studio 2017、opencv-3.4.、cvui-2.7.0

三、執行方式

選擇要讀入的圖片初始樣式,全彩。











滑動改變亮度,右亮左暗
全彩初始畫面

























調亮102
























調暗119


























選擇要讀入的圖片初始樣式,灰階。









灰階初始畫面

























調亮161

























調暗145
























按save存檔,檔名為output.jpg















按鍵盤ESC結束程式