Like Share Discussion Bookmark Smile

J.J. Huang   2026-01-30   Python OpenCV 04.幾何與繪圖篇   瀏覽次數:次   DMCA.com Protection Status

Python | OpenCV 繪製各種形狀

📚 前言

在前一篇我們學會了 馬賽克與羽化效果,能夠隱藏敏感資訊或讓圖片邊緣更柔和。
這一篇要介紹 繪製各種形狀,包括直線、矩形、圓形、橢圓、多邊形與箭頭,這些基本圖形常用於影像標註,例如框選人臉、標記區域或繪製輔助線。

✏️ 繪製直線(Line)

1
2
3
4
5
6
7
8
9
10
11
import cv2, numpy as np

# 建立一張黑色背景圖片
img = np.zeros((300,300,3), dtype="uint8")

# 繪製一條白色直線
cv2.line(img, (50,50), (250,250), (255,255,255), 3)

cv2.imshow("Line", img)
cv2.waitKey(0)
cv2.destroyAllWindows()


圖:程式碼執行結果 — 繪製直線

🟥 繪製矩形(Rectangle)

1
2
3
4
5
6
7
8
9
10
11
import cv2, numpy as np

# 建立一張黑色背景圖片
img = np.zeros((300,300,3), dtype="uint8")

# 繪製一個綠色矩形
cv2.rectangle(img, (50,50), (200,200), (0,255,0), 2)

cv2.imshow("Rectangle", img)
cv2.waitKey(0)
cv2.destroyAllWindows()


圖:程式碼執行結果 — 繪製矩形

⚪ 繪製圓形(Circle)

1
2
3
4
5
6
7
8
9
10
11
import cv2, numpy as np

# 建立一張黑色背景圖片
img = np.zeros((300,300,3), dtype="uint8")

# 繪製一個紅色圓形 (填滿)
cv2.circle(img, (150,150), 80, (0,0,255), -1)

cv2.imshow("Circle", img)
cv2.waitKey(0)
cv2.destroyAllWindows()


圖:程式碼執行結果 — 繪製圓形

🟠 繪製橢圓(Ellipse)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import cv2, numpy as np

# 建立一張黑色背景圖片
img = np.zeros((300,300,3), dtype="uint8")

# 繪製一個藍色橢圓
# (150,150) 為中心點
# (100,50) 為長軸與短軸
# 30 為旋轉角度 (單位:度)
# 0, 360 表示繪製完整橢圓;若改成 0, 180 則只畫半橢圓
cv2.ellipse(img, (150,150), (100,50), 30, 0, 360, (255,0,0), 2)

cv2.imshow("Ellipse", img)
cv2.waitKey(0)
cv2.destroyAllWindows()


圖:程式碼執行結果 — 繪製橢圓

🔺 繪製多邊形(Polygon)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import cv2, numpy as np

# 建立一張黑色背景圖片
img = np.zeros((300,300,3), dtype="uint8")

# 定義三角形的三個頂點
pts = np.array([[50,200],[150,50],[250,200]], np.int32)
pts = pts.reshape((-1,1,2))

# 繪製黃色多邊形
# True 表示封閉多邊形;False 則只畫折線
cv2.polylines(img, [pts], True, (0,255,255), 2)

cv2.imshow("Polygon", img)
cv2.waitKey(0)
cv2.destroyAllWindows()


圖:程式碼執行結果 — 繪製多邊形

➡️ 繪製箭頭(Arrowed Line)

1
2
3
4
5
6
7
8
9
10
11
import cv2, numpy as np

# 建立一張黑色背景圖片
img = np.zeros((300,300,3), dtype="uint8")

# 繪製一條紫色箭頭線
cv2.arrowedLine(img, (50,150), (250,150), (255,0,255), 3)

cv2.imshow("Arrowed Line", img)
cv2.waitKey(0)
cv2.destroyAllWindows()


圖:程式碼執行結果 — 繪製箭頭

📊 效果比較

圖形 函式 常見用途
直線 cv2.line() 標註方向、繪製輔助線
矩形 cv2.rectangle() 框選人臉、標記區域
圓形 cv2.circle() 標記點位、繪製圓形區域
橢圓 cv2.ellipse() 標註範圍、特殊標記
多邊形 cv2.polylines() 框選不規則區域
箭頭 cv2.arrowedLine() 標示方向、流程圖

⚠️ 注意事項

  • 座標系統:OpenCV 的座標以左上角為原點 (0,0),x 向右、y 向下。
  • 顏色格式:OpenCV 使用 BGR,而不是 RGB。
  • 厚度參數:設為 -1 時會填滿形狀。
  • 多邊形:座標需用 numpy.array 定義,並 reshape 成正確格式。

🎯 結語

這一篇我們學會了 繪製各種形狀,包括直線、矩形、圓形、橢圓、多邊形與箭頭,能夠在圖片上標註或繪製基本圖形。這些技巧在影像處理、標註資料集、製作輔助工具時非常常見。

在下一篇,我們將進一步探索 在圖片中加入文字標註,學習如何使用 cv2.putText() 在圖片上加上文字,讓影像更有資訊性。

📖 如在學習過程中遇到疑問,或是想了解更多相關主題,建議回顧一下 Python | OpenCV 系列導讀,掌握完整的章節目錄,方便快速找到你需要的內容。

註:以上參考了
OpenCV Tutorials
OpenCV-Python Tutorials