溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

opencv如何繪制線條、矩形、圓弧線、橢圓弧線、多邊形、添加文字

發布時間:2021-12-13 17:23:44 來源:億速云 閱讀:317 作者:小新 欄目:大數據
# OpenCV如何繪制線條、矩形、圓弧線、橢圓弧線、多邊形、添加文字

OpenCV作為計算機視覺領域的核心工具庫,提供了豐富的繪圖功能。本文將詳細介紹如何使用OpenCV繪制基礎幾何圖形和文字,涵蓋線條、矩形、圓弧線、橢圓弧線、多邊形以及文字添加等操作。

## 一、準備工作

### 1.1 安裝OpenCV
```python
pip install opencv-python

1.2 基礎代碼框架

import cv2
import numpy as np

# 創建空白畫布(512x512像素,3通道BGR)
canvas = np.zeros((512, 512, 3), dtype=np.uint8)
canvas.fill(255)  # 白色背景

二、繪制線條

2.1 基本語法

cv2.line(img, pt1, pt2, color, thickness=1, lineType=cv2.LINE_8, shift=0)

2.2 參數說明

  • img: 目標圖像
  • pt1: 起點坐標(x,y)
  • pt2: 終點坐標(x,y)
  • color: BGR格式顏色元組
  • thickness: 線寬(像素)
  • lineType: 線型(默認8連通)

2.3 示例代碼

# 繪制紅色對角線
cv2.line(canvas, (0,0), (511,511), (0,0,255), 5)

# 繪制綠色水平線
cv2.line(canvas, (100,200), (400,200), (0,255,0), 3)

三、繪制矩形

3.1 基本語法

cv2.rectangle(img, pt1, pt2, color, thickness=1, lineType=cv2.LINE_8, shift=0)

3.2 特殊參數

  • thickness=-1: 表示填充矩形

3.3 示例代碼

# 繪制藍色邊框矩形
cv2.rectangle(canvas, (50,50), (200,200), (255,0,0), 2)

# 繪制填充黃色矩形
cv2.rectangle(canvas, (300,300), (450,450), (0,255,255), -1)

四、繪制圓弧線

4.1 基本語法

cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness=1, lineType=cv2.LINE_8, shift=0)

4.2 參數說明

  • center: 圓心坐標
  • axes: (長軸長度,短軸長度)
  • angle: 旋轉角度(順時針)
  • startAngle: 起始角度(3點鐘方向為0度)
  • endAngle: 終止角度

4.3 示例代碼

# 繪制90度圓弧
cv2.ellipse(canvas, (256,256), (100,50), 0, 0, 90, (128,0,128), 3)

# 繪制旋轉45度的半圓
cv2.ellipse(canvas, (256,256), (80,80), 45, 0, 180, (0,128,128), 2)

五、繪制橢圓弧線

5.1 使用ellipse函數

橢圓弧線實際上是圓弧線的擴展形式,通過設置不同的長軸和短軸實現。

5.2 示例代碼

# 繪制完整橢圓
cv2.ellipse(canvas, (150,400), (60,30), 0, 0, 360, (255,0,0), 2)

# 繪制部分橢圓弧
cv2.ellipse(canvas, (350,400), (80,40), 30, 45, 270, (0,0,255), 3)

六、繪制多邊形

6.1 基本語法

cv2.polylines(img, pts, isClosed, color, thickness=1, lineType=cv2.LINE_8, shift=0)

6.2 參數說明

  • pts: 頂點坐標數組(需為int32類型)
  • isClosed: 是否閉合多邊形

6.3 示例代碼

# 定義五邊形頂點
pts = np.array([[100,50], [200,80], [180,200], [120,220], [50,150]], np.int32)
pts = pts.reshape((-1,1,2))

# 繪制多邊形
cv2.polylines(canvas, [pts], True, (0,128,0), 3)

# 填充多邊形(使用fillPoly)
cv2.fillPoly(canvas, [pts], (200,200,0))

七、添加文字

7.1 基本語法

cv2.putText(img, text, org, fontFace, fontScale, color, thickness=1, lineType=cv2.LINE_8, bottomLeftOrigin=False)

7.2 參數說明

  • text: 要繪制的字符串
  • org: 文字左下角坐標
  • fontFace: 字體類型
  • fontScale: 字體縮放因子

7.3 支持字體

FONT_HERSHEY_SIMPLEX = 0
FONT_HERSHEY_PLN = 1
FONT_HERSHEY_DUPLEX = 2
FONT_HERSHEY_COMPLEX = 3
FONT_HERSHEY_TRIPLEX = 4
FONT_HERSHEY_COMPLEX_SMALL = 5
FONT_HERSHEY_SCRIPT_SIMPLEX = 6
FONT_HERSHEY_SCRIPT_COMPLEX = 7

7.4 示例代碼

# 添加簡單文字
cv2.putText(canvas, 'OpenCV', (50,450), cv2.FONT_HERSHEY_SIMPLEX, 2, (0,0,0), 3)

# 添加帶樣式的文字
cv2.putText(canvas, 'Python', (300,100), 
            cv2.FONT_HERSHEY_SCRIPT_COMPLEX, 
            1.5, (255,100,50), 2, cv2.LINE_AA)

八、綜合示例

# 創建新畫布
canvas = np.zeros((600,800,3), np.uint8)
canvas.fill(240)  # 淺灰色背景

# 繪制交通信號燈
cv2.circle(canvas, (400,150), 50, (0,0,255), -1)  # 紅燈
cv2.circle(canvas, (400,250), 50, (0,165,255), -1)  # 黃燈
cv2.circle(canvas, (400,350), 50, (0,255,0), -1)  # 綠燈
cv2.rectangle(canvas, (300,80), (500,420), (0,0,0), 3)

# 添加文字說明
cv2.putText(canvas, "STOP", (350,160), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255), 2)
cv2.putText(canvas, "READY", (350,260), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,0), 2)
cv2.putText(canvas, "GO", (370,360), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,0), 2)

# 顯示結果
cv2.imshow("Drawing Demo", canvas)
cv2.waitKey(0)
cv2.destroyAllWindows()

九、高級技巧

9.1 抗鋸齒繪制

# 使用LINE_AA抗鋸齒線型
cv2.line(canvas, (0,0), (511,511), (0,0,0), 5, cv2.LINE_AA)

9.2 透明度效果

# 創建透明圖層
overlay = canvas.copy()
cv2.rectangle(overlay, (100,100), (300,300), (0,0,255), -1)
cv2.addWeighted(overlay, 0.5, canvas, 0.5, 0, canvas)

9.3 繪制箭頭

cv2.arrowedLine(canvas, (400,100), (400,400), (255,0,255), 3, tipLength=0.1)

十、總結

本文詳細介紹了OpenCV的繪圖功能,包括: 1. 線條繪制:cv2.line() 2. 矩形繪制:cv2.rectangle() 3. 圓弧/橢圓?。?code>cv2.ellipse() 4. 多邊形繪制:cv2.polylines() 5. 文字添加:cv2.putText()

掌握這些基礎繪圖操作,可以為圖像處理、計算機視覺項目添加可視化標注,是OpenCV應用開發的重要基礎技能。

提示:所有繪圖函數都會直接修改輸入圖像,如需保留原始圖像,請先創建副本。 “`

(全文約1850字,包含代碼示例和詳細參數說明)

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女