s1091536 作業2

 1.題目說明:

撰寫一個程式,以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE)

(a)利用 Sobel Operators 偵測並輸出邊緣成分圖

(b)設計一個類似素描線條的自畫像圖案。(想想:如何使用邊緣偵測所得到的點,結合 成看似素描筆畫出的線條?)



2.開發環境:

OS: Windows 11
Editor: PyCharm
Language: python 3.8
Package: OpenCV 4.7.0

3.操作:

“python .\hw2_1091536_edge.py”啟動程式。

一次出現(a)邊緣成分圖(b)類素描線條圖




4.方法及實作:

(a)概念:

 

將圖像以灰階讀入

-------------------------------------------------------------------------------------------------------

接著用 Sobel Operator 偵測並輸出邊緣成分圖

-------------------------------------------------------------------------------------------------------

原本預計將圖像做Invert (img[row][col] = 255 - img[row][col]) 得到黑白轉轉圖像後,再做二值化處理。

接著選擇寫在同一個 function 裡,合併處理。

我將灰階值 110 作為分界,

大於110的視為白色,直接設定為150(灰色鉛筆色)

小於110的視為黑色,直接設定為 255(白色背景)

消除大部分內部線條,顯示輪廓,得到以下類素描圖像。

 

最後使用高思濾波將圖像模糊,使其更接近鉛筆素描。





 

(b)程式:

 

使用cvtColor將圖像以灰階讀入。

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

使用Sobel Operator 偵測並輸出邊緣成分圖。

sobelX = cv2.Sobel(img, cv2.CV_64F, 1, 0)

sobelY = cv2.Sobel(img, cv2.CV_64F, 0, 1)

sobelX = np.uint8(np.absolute(sobelX))
sobelY = np.uint8(np.absolute(sobelY))
sobelCombined = cv2.bitwise_or(sobelX
, sobelY)

Invert 的同時 將圖像進行二質化處理

(rows,cols) = img.shape
for i in range(rows):
  
for j in range(cols):
     
if img[i][j]>=110: # 255 white
        
img[i][j] = 150
     
else:
         img[i][j] =
255

高思濾波處理

sketch = cv2.GaussianBlur(sketch, (3, 3), 0)

留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1061637 作業6