前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV-Python学习(12)—— OpenCV 向图像添加文本(cv.putText、cv.getTextSize)

OpenCV-Python学习(12)—— OpenCV 向图像添加文本(cv.putText、cv.getTextSize)

作者头像
Rattenking
发布2022-11-12 11:53:50
1.6K0
发布2022-11-12 11:53:50
举报
文章被收录于专栏:Rattenking

1. 学习目标

  1. 学会使用 cv.putText 函数向图像添加文本;
  2. 学会使用 cv.getTextSize 函数获取绘制文本占用的宽高等属性。

2. 绘制文本 cv.putText 函数说明

2.1 函数使用
代码语言:javascript
复制
cv.putText(img, text, pos, fontFace,fontScale,color[, thickness[, lineType[, bottomLeftOrigin]]]) → img
2.2 参数说明

参数

说明

img

表示输入图像,允许单通道灰度图像或多通道彩色图像。

text

表示添加的文本字符串。

pos

表示文本字符串 左下角坐标 ,(x, y) 格式的元组。

fontFace

表示字体类型。

fontScale

表示字体缩放比例因子。

color

表示绘制直线的颜色,(b,g,r) 格式的元组,或者表示灰度值的标量。

thickness

表示绘制直线的粗细,默认值 1px,-1 表示内部填充。

lineType

表示绘制直线的线性,默认为 LINE_8。

bottomLeftOrigin

表示为可选参数,默认值 True 表示数据原点位于左下角,False 表示位于左上角。

2.3 fontFace 值说明

描述

cv.FONT_HERSHEY_SIMPLEX

表示正常大小无衬线字体。

cv.FONT_HERSHEY_PLAIN

表示小号无衬线字体。

cv.FONT_HERSHEY_DUPLEX

表示正常大小无衬线字体,比FONT_HERSHEY_SIMPLEX更复杂。

cv.FONT_HERSHEY_COMPLEX

表示正常大小有衬线字体。

cv.FONT_HERSHEY_TRIPLEX

表示正常大小有衬线字体,比FONT_HERSHEY_COMPLEX更复杂。

cv.FONT_HERSHEY_COMPLEX_SMALL

表示FONT_HERSHEY_COMPLEX的小译本。

cv.FONT_HERSHEY_SCRIPT_SIMPLEX

表示手写风格字体。

cv.FONT_HERSHEY_SCRIPT_COMPLEX

表示手写风格字体,比FONT_HERSHEY_SCRIPT_SIMPLEX更复杂。

cv.FONT_ITALIC

表示相应字体的斜体字。

2.4 lineType 值说明

描述

cv.LINE_4

表示 4 邻接线型。

cv.LINE_8

表示 8 邻接线型。

cv.LINE_AA

表示抗锯齿线型,图像更平滑。

2.5 注意

OpenCV 不支持显示中文字符,使用 cv.putText() 时添加的文本字符串不能包含中文字符(包括中文标点符号)!!!

3. 获取文本属性 cv.getTextSize 函数说明

3.1 函数使用
代码语言:javascript
复制
cv.getTextSize(text, fontFace, fontScale, thickness)
3.2 参数说明

参数

说明

text

表示添加的文本字符串。

fontFace

表示字体类型。

fontScale

表示字体缩放比例因子。

thickness

表示绘制直线的粗细,默认值 1px,-1 表示内部填充。

3.3 返回参数说明

返回参数

说明

(fw,fh)

表示文本区域大小的宽高。

bh

表示字体基线baseline位置。

4. 绘制文本实例

4.1 实例代码
代码语言:javascript
复制
import cv2 as cv

def draw_text():
  img = cv.imread("./images/messi5.jpg")

  font_faces = [
    cv.FONT_HERSHEY_SIMPLEX,
    cv.FONT_HERSHEY_PLAIN,
    cv.FONT_HERSHEY_DUPLEX,
    cv.FONT_HERSHEY_COMPLEX,
    cv.FONT_HERSHEY_TRIPLEX,
    cv.FONT_HERSHEY_COMPLEX_SMALL,
    cv.FONT_HERSHEY_SCRIPT_SIMPLEX,
    cv.FONT_HERSHEY_SCRIPT_COMPLEX,
    cv.FONT_ITALIC
  ]
  text = "Rattenking learning OpenCV-Python!"
  for i in range(len(font_faces)):
    pos = (20, 40 * (i + 1))
    cv.putText(img, text, pos, font_faces[i], 0.7, (255,255,255), 1, cv.LINE_AA)

  cv.imshow("text img", img)
  cv.waitKey(0)
  cv.destroyAllWindows()

if __name__ == "__main__":
  draw_text()
4.2 实例运行结果
输入图片说明
输入图片说明

5. 通过 cv.getTextSize 获取文本宽高属性绘制

5.1 实例代码
代码语言:javascript
复制
import cv2 as cv

def draw_text():
  img = cv.imread("./images/messi5.jpg")

  font_faces = [
    cv.FONT_HERSHEY_SIMPLEX,
    cv.FONT_HERSHEY_PLAIN,
    cv.FONT_HERSHEY_DUPLEX,
    cv.FONT_HERSHEY_COMPLEX,
    cv.FONT_HERSHEY_TRIPLEX,
    cv.FONT_HERSHEY_COMPLEX_SMALL,
    cv.FONT_HERSHEY_SCRIPT_SIMPLEX,
    cv.FONT_HERSHEY_SCRIPT_COMPLEX,
    cv.FONT_ITALIC
  ]
  text = "Rattenking learning OpenCV-Python!"
  for i in range(len(font_faces)):
    pos = (20, 40 * (i + 1))
    (fw,fh),bh = cv.getTextSize(text, font_faces[i], 0.7, 1)
    cv.putText(img, text, pos, font_faces[i], 0.7, (255,255,255), 1, cv.LINE_AA)
    end_pos = (20 + fw, 40 * (i + 1))
    cv.line(img, pos, end_pos, (255,0,0), 1)
    cv.line(img, (20, 40 * (i + 1) + bh), (20 + fw, 40 * (i + 1) + bh), (0,0,255), 1)

  cv.imshow("text img", img)
  cv.waitKey(0)
  cv.destroyAllWindows()

if __name__ == "__main__":
  draw_text()
5.2 实例运行结果
输入图片说明
输入图片说明

6. 总结

  1. 函数 cv.putText 的参数 thickness 不能为负数,负数报错;
代码语言:javascript
复制
cv2.error: OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\drawing.cpp:1711: error: (-215:Assertion failed) 0 <= shift && shift <= XY_SHIFT && thickness >= 0 in function 'cv::PolyLine'
  1. 函数 cv.line 的参数 thickness 不能为负数,负数报错。
代码语言:javascript
复制
cv2.error: OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\drawing.cpp:1802: error: (-215:Assertion failed) 0 < thickness && thickness <= MAX_THICKNESS in function 'cv::line'
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 学习目标
  • 2. 绘制文本 cv.putText 函数说明
    • 2.1 函数使用
      • 2.2 参数说明
        • 2.3 fontFace 值说明
          • 2.4 lineType 值说明
            • 2.5 注意
            • 3. 获取文本属性 cv.getTextSize 函数说明
              • 3.1 函数使用
                • 3.2 参数说明
                  • 3.3 返回参数说明
                  • 4. 绘制文本实例
                    • 4.1 实例代码
                      • 4.2 实例运行结果
                      • 5. 通过 cv.getTextSize 获取文本宽高属性绘制
                        • 5.1 实例代码
                          • 5.2 实例运行结果
                          • 6. 总结
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档