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")
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))
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