OpenCV-Python 常用绘图函数详解

文章详细介绍了OpenCV-Python库中用于图像标注的putText函数和绘制矩形的rectangle函数,包括参数用法、字体样式、线型选择,并提供了示例代码展示不同字体和线型的效果。
摘要由CSDN通过智能技术生成

1. cv2.putText() 函数详解

  • 官方文档:cv::putText
  • 函数原型
    cv.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]]	) ->	img
    
  • 用法
    在图像img上呈现指定的指定的文本字符串text
  • 参数说明
参数类型说明备注
imgnumpy.ndarray需要添加文字的图像
textstr需要添加的文字,以字符串形式给出
org(int, int)文本字符串在图像中左下角的位置,(x,y)的坐标顺序
fontFaceint字体样式支持9种字体样式
fontScalefloat浮点数,给出文本尺度因子
colorAny文本颜色,按(B, G, R)顺序给出
thicknessint用于绘制文本的线条的粗细默认值为1
lineTypeint线型默认值LINE_8
bottomLeftOriginbool如果为真值,则图像原点在左下角,否则,在左上角默认False

2. cv2.rectangle() 函数详解

  • 官方文档:cv::rectangle()

  • 函数原型:

    cv.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]]	) ->	img
    cv.rectangle(img, rec, color[, thickness[, lineType[, shift]]]	) ->	img
    
  • 绘制矩形轮廓或填充矩形,有重载函数,支持不同实参传入:

    • 传入两个对角顶点的坐标;
    • 传入rec矩形。
  • 参数说明

    参数类型说明备注
    imgnumpy.ndarray需绘制矩形的图像
    pt1str矩形顶点1
    pt2(int, int)与顶点1处于对角的另一顶点
    colorAny矩形颜色,按(B, G, R)顺序给出
    thicknessint绘制矩形的线条宽度默认值为1
    lineTypeint线型默认值LINE_8
    shiftint点坐标中的小数位数默认为0

3. 字体样式

  • 支持下列9种字体样式,函数传参时,既可以传具体的字体样式,也可以直接用相应的index

    index字体样式说明
    0cv2.FONT_HERSHEY_SIMPLEX正常大小无衬线字体
    1cv2.FONT_HERSHEY_PLAIN小型无衬线字体
    2cv2.FONT_HERSHEY_DUPLEX正常大小的无衬线字体(比font_HERSHEY_SIMPLEX更复杂)
    3cv2.FONT_HERSHEY_COMPLEX正常大小衬线字体
    4cv2.FONT_HERSHEY_TRIPLEX正常大小的衬线字体(比font_HERSHEY_complex更复杂)
    5cv2.FONT_HERSHEY_COMPLEX_SMALLFONT_HERSHEY_COMPLEX的较小版本
    6cv2.FONT_HERSHEY_SCRIPT_SIMPLEX手写字体
    7cv2.FONT_HERSHEY_SCRIPT_COMPLEXFONT_HERSHEY_SCRIPT_SIMPLEX的更复杂变体
    16cv2.FONT_ITALIC斜体标志
  • 字体样式预览
    cv2.putText()函数支持字体类型

4. 绘图线型

  • 官方文档:cv::LineTypes
  • 可用的线型有以下四种
    线型说明备注
    cv2.FILLED
    cv2.LINE_44连接线
    cv2.LINE_88连接线
    cv2.LINE_AA抗锯齿线可得到更平滑的曲线
  • 不同线型效果预览
    不同线型效果预览

5. 示例代码

  • 生成前文字体样式预览效果所用代码如下
    import cv2
    import numpy as np
    
    z1 = np.zeros((460, 1130, 3), dtype='uint8')
    
    font_list = ['FONT_HERSHEY_SIMPLEX', 'FONT_HERSHEY_PLAIN', 'FONT_HERSHEY_DUPLEX', 'FONT_HERSHEY_COMPLEX', \
                 'FONT_HERSHEY_TRIPLEX', 'FONT_HERSHEY_COMPLEX_SMALL', 'FONT_HERSHEY_SCRIPT_SIMPLEX', \
                 'FONT_HERSHEY_SCRIPT_COMPLEX', 'FONT_ITALIC']
    
    font_family = [cv2.FONT_HERSHEY_SIMPLEX, cv2.FONT_HERSHEY_PLAIN, cv2.FONT_HERSHEY_DUPLEX, \
                   cv2.FONT_HERSHEY_COMPLEX, cv2.FONT_HERSHEY_TRIPLEX, cv2.FONT_HERSHEY_COMPLEX_SMALL, \
                   cv2.FONT_HERSHEY_SCRIPT_SIMPLEX, cv2.FONT_HERSHEY_SCRIPT_COMPLEX, cv2.FONT_ITALIC]
    
    pos = (20, 35)
    text_color = (0, 255, 255)
    rect_color = (0, 0, 0)
    
    for idx, font_name in enumerate(font_family):
        info_name = f'font type [idx-{font_family[idx]}]: {font_list[idx]}'
    
        info_style = 'Test Text Appearance.'
    
        cv2.rectangle(z1, (pos[0] - 15, pos[1] + 15), (pos[0] + 1100, pos[1] - 30), rect_color, -1)  # 填充
        cv2.rectangle(z1, (pos[0] - 15, pos[1] + 15), (pos[0] + 1100, pos[1] - 30), (255, 255, 255))  # 画框
    
        cv2.rectangle(z1, (pos[0] - 15 + 750, pos[1] + 15), (pos[0] + 1100, pos[1] - 30), rect_color, -1)  # 填充
        cv2.rectangle(z1, (pos[0] - 15 + 750, pos[1] + 15), (pos[0] + 1100, pos[1] - 30), (255, 255, 255))  # 画框
    
        cv2.putText(z1, info_name, pos, 3, 0.8, text_color, 1, cv2.LINE_AA)
        cv2.putText(z1, info_style, (pos[0] + 750, pos[1]), font_name, 0.8, text_color, 1, cv2.LINE_AA)
    
        pos = (pos[0], pos[1] + 50)
    
    cv2.imshow('src', z1)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_湘江夜话_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值