點贊 + 關注 + 收藏 = 學會了
推薦 《OpenCV-Python專欄》
使用 OpenCV 做目標檢查時,我們可以通過 OpenCV 提供的圖形繪製功能,將監測到的目標框起來,方便我們調試。這些功能在數據可視化、圖像標註等場景中非常實用。
OpenCV 支持繪製以下圖形:
- 線段
- 矩形
- 圓形
- 橢圓
- 多邊形
- 填充多邊形
- 帶箭頭的線
用法都很簡單,動手試試~
繪製線段
繪製線段的方法叫 cv2.line()
可傳以下參數
cv2.line(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)
img: 要繪製直線的目標圖像。pt1: 起點座標。pt2: 終點座標。color: 線條顏色((B, G, R)格式)。thickness: 線條寬度(默認 1,負值無效)。-
lineType: 線條類型(cv2.LINE_8默認)。cv2.LINE_8(默認值):8-connected 線條(像素完全連接)。cv2.LINE_4:4-connected 線條(像素部分連接)。cv2.LINE_AA:抗鋸齒線條(平滑效果更好)。
shift: 座標的小數點精度(用於處理亞像素座標)。默認為 0,表示整數座標。
import cv2
import numpy as np
# 創建空白圖像
img = np.zeros((400, 400, 3), dtype=np.uint8)
# 繪製不同類型的線條
cv2.line(img, (50, 50), (200, 50), (255, 255, 255), 1) # 白色線條,默認類型
cv2.line(img, (50, 100), (200, 100), (0, 255, 0), 30) # 綠色線條,粗細為 30
cv2.line(img, (50, 150), (200, 150), (0, 0, 255), 30, cv2.LINE_AA) # 紅色抗鋸齒線條
# 展示圖片
cv2.imshow("Img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
繪製矩形
繪製矩形的方法是 cv2.rectangle()
可傳以下參數
cv2.rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)
img: 要繪製矩形的目標圖像。pt1: 矩形的左上角頂點。pt2: 矩形的右下角頂點。color: 矩形邊框或填充的顏色。thickness: 矩形邊框的寬度(像素)。值為負數時填充矩形。-
lineType: 矩形邊框類型(cv2.LINE_8默認)。cv2.LINE_8(默認值):8-connected 線條(像素完全連接)。cv2.LINE_4:4-connected 線條(像素部分連接)。cv2.LINE_AA:抗鋸齒線條(平滑效果更好)。
shift: 座標的小數點精度(用於處理亞像素座標)。默認為 0,表示整數座標。
import cv2
import numpy as np
# 創建空白圖像
img = np.zeros((400, 400, 3), dtype=np.uint8)
# 繪製不同類型的矩形
cv2.rectangle(img, (50, 50), (150, 150), (255, 0, 0), 10) # 藍色矩形,邊框寬度 3
cv2.rectangle(img, (200, 50), (300, 150), (0, 255, 0), -1) # 綠色填充矩形
cv2.rectangle(img, (50, 200), (150, 300), (0, 0, 255), 10, cv2.LINE_AA) # 紅色抗鋸齒矩形
# 顯示圖像
cv2.imshow('Img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
繪製圓形
繪製圓形的方法叫 cv2.circle()
可傳以下參數
cv2.circle(img, center, radius, color, thickness=None, lineType=None, shift=None)
img: 要繪製圓形的目標圖像。center: 圓心座標 (x, y)。radius: 圓半徑(像素)。color: 圓形邊框或填充的顏色。thickness: 圓形邊框的寬度(像素)。值為負數時填充圓形。-
lineType: 圓形邊框類型(cv2.LINE_8默認)。cv2.LINE_8(默認值):8-connected 線條(像素完全連接)。cv2.LINE_4:4-connected 線條(像素部分連接)。cv2.LINE_AA:抗鋸齒線條(平滑效果更好)。
shift: 座標的小數點精度(用於處理亞像素座標)。默認為 0,表示整數座標。
import cv2
import numpy as np
# 創建空白圖像
img = np.zeros((400, 400, 3), dtype=np.uint8)
# 繪製不同類型的圓形
cv2.circle(img, (100, 100), 50, (255, 0, 0), 2) # 藍色圓形,邊框寬度2
cv2.circle(img, (250, 100), 50, (0, 255, 0), -1) # 綠色填充圓形
cv2.circle(img, (100, 250), 50, (0, 0, 255), 2, cv2.LINE_AA) # 紅色抗鋸齒圓形
# 顯示圖像
cv2.imshow('Circles', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
繪製橢圓
繪製橢圓的方法叫 cv2.ellipse()
可傳以下參數
cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness=None, lineType=None, shift=None)
img: 要繪製橢圓的目標圖像。center: 橢圓中心 (x, y)。axes: 長軸和短軸的半徑 (major, minor)。angle: 橢圓旋轉角度(逆時針)。startAngle: 起始角度(單位:度)。endAngle: 終止角度(單位:度)。color: 橢圓邊框或填充的顏色。thickness: 橢圓邊框的寬度(像素)。值為負數時填充橢圓。-
lineType: 橢圓邊框類型(cv2.LINE_8默認)。cv2.LINE_8(默認值):8-connected 線條(像素完全連接)。cv2.LINE_4:4-connected 線條(像素部分連接)。cv2.LINE_AA:抗鋸齒線條(平滑效果更好)。
shift: 座標的小數點精度(用於處理亞像素座標)。默認為 0,表示整數座標。
import cv2
import numpy as np
# 創建空白圖像
img = np.zeros((400, 400, 3), dtype=np.uint8)
# 繪製不同類型的橢圓
cv2.ellipse(img, (100, 100), (80, 40), 0, 0, 360, (255, 0, 0), 2) # 藍色橢圓,邊框寬度2
cv2.ellipse(img, (250, 100), (40, 80), 45, 0, 360, (0, 255, 0), -1) # 綠色填充橢圓,旋轉45度
cv2.ellipse(img, (100, 250), (60, 30), 90, 0, 360, (0, 0, 255), 2, cv2.LINE_AA) # 紅色抗鋸齒橢圓,旋轉90度
# 繪製不閉合的橢圓(只繪製0-180度部分)
cv2.ellipse(img, (250, 250), (70, 35), 135, 0, 180, (255, 255, 0), 2) # 黃色不閉合橢圓,旋轉135度
# 顯示圖像
cv2.imshow('Ellipses', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
繪製多邊形
繪製一組多邊形線條可以用 cv2.polylines() 方法。
可傳以下參數
cv2.polylines(img, pts, isClosed, color, thickness=None, lineType=None, shift=None)
img: 要繪製多邊形的目標圖像。pts: 頂點列表(數組形式,例如 [[(x1, y1), (x2, y2), ...]])。isClosed: 是否閉合多邊形。color: 多邊形邊框顏色。thickness: 線條寬度。lineType: 線條類型。shift: 座標小數點精度。
import cv2
import numpy as np
# 創建空白圖像
img = np.zeros((400, 400, 3), dtype=np.uint8)
# 創建多邊形頂點座標
triangle = np.array([[100, 100], [50, 200], [150, 200]], np.int32) # 三角形
pentagon = np.array([[100, 250], [50, 300], [75, 350], [125, 350], [150, 300]], np.int32) # 五邊形
# 繪製多邊形
cv2.polylines(img, [triangle], True, (255, 0, 0), 2) # 藍色三角形輪廓
cv2.polylines(img, [pentagon], True, (0, 0, 255), 2, cv2.LINE_AA) # 紅色抗鋸齒五邊形輪廓
# 創建不閉合多邊形的頂點座標
open_polygon = np.array([[250, 250], [200, 300], [250, 350], [300, 300]], np.int32) # 四邊形
# 繪製不閉合的多邊形 (isClosed=False)
cv2.polylines(img, [open_polygon], False, (0, 255, 0), 2) # 綠色不閉合多邊形
# 顯示圖像
cv2.imshow('Polygons', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
繪製填充多邊形
繪製一組多邊形線條可以用 cv2.fillPoly() 方法。
可傳以下參數
cv2.fillPoly(img, pts, color, lineType=None, shift=None, offset=None)
img: 要繪製多邊形的目標圖像。pts: 頂點列表(數組形式,例如 [[(x1, y1), (x2, y2), ...]])。color: 填充顏色。lineType: 邊界線條類型。shift: 座標小數點精度。offset: 全局頂點偏移量 (x_offset,y_offset)。
import cv2
import numpy as np
# 創建空白圖像
img = np.zeros((400, 400, 3), dtype=np.uint8)
# 創建多邊形頂點座標
triangle = np.array([[100, 100], [50, 200], [150, 200]], np.int32) # 三角形
pentagon = np.array([[100, 250], [50, 300], [75, 350], [125, 350], [150, 300]], np.int32) # 五邊形
# 繪製填充多邊形
cv2.fillPoly(img, [triangle], (255, 0, 0)) # 藍色填充三角形
cv2.fillPoly(img, [pentagon], (0, 0, 255)) # 紅色填充五邊形
# 顯示圖像
cv2.imshow('Filled Polygons', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
繪製帶箭頭的線
繪製帶箭頭的線可以用 cv2.arrowedLine()。
可傳以下參數
cv2.arrowedLine(img, pt1, pt2, color, thickness=None, lineType=None, shift=None, tipLength=None)
img: 要繪製圖形的目標圖像。pt1: 箭頭的起點。pt2: 箭頭的終點。- color: 箭頭顏色。
- thickness: 線條寬度。
- lineType: 線條類型。
- shift: 座標小數點精度。
- tipLength: 箭頭尖端長度(0.0 到 1.0 之間)。
import cv2
import numpy as np
# 創建空白圖像
img = np.zeros((400, 400, 3), dtype=np.uint8)
# 繪製不同類型的箭頭線
cv2.arrowedLine(img, (50, 50), (200, 50), (255, 0, 0), 2) # 藍色水平箭頭線
cv2.arrowedLine(img, (50, 100), (200, 200), (0, 255, 0), 3) # 綠色斜向箭頭線
cv2.arrowedLine(img, (50, 250), (50, 350), (0, 0, 255), 2, cv2.LINE_AA, 0, 0.3) # 紅色垂直抗鋸齒箭頭線,箭頭大小為0.3
# 顯示圖像
cv2.imshow('Arrowed Lines', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
點贊 + 關注 + 收藏 = 學會了