点赞 + 关注 + 收藏 = 学会了
推荐 《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()
点赞 + 关注 + 收藏 = 学会了
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。