1. 学习目标

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

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

2.1 函数使用

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 函数使用

cv.getTextSize(text, fontFace, fontScale, thickness)

3.2 参数说明

参数 说明
text 表示添加的文本字符串。
fontFace 表示字体类型。
fontScale 表示字体缩放比例因子。
thickness 表示绘制直线的粗细,默认值 1px,-1 表示内部填充。

3.3 返回参数说明

返回参数 说明
(fw,fh) 表示文本区域大小的宽高。
bh 表示字体基线baseline位置。

4. 绘制文本实例

4.1 实例代码

import cv2 as cvdef 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 实例代码

import cv2 as cvdef 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 不能为负数,负数报错;
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 不能为负数,负数报错。
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'

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

  1. Opencv+Python学习记录7:图像加权和(内附详细代码)

    一,介绍 所谓图像加权和,就是在计算两幅图像的像素值之和时,将每幅图像的权重考虑进来,可以用公式表示为: dst=saturate(src1×α+src2×β+γ) 式中,saturate()表示取饱 ...

  2. Opencv+Python学习记录6:图像加法运算(内附详细代码)

    1.加号运算符 使用加号运算符"+"对图像a(像素值为a)和图像b(像素值为b)进行求和运算,遵循以下规则: 式中,mod()是取模运算,"mod(a+b,256)&qu ...

  3. 【OpenCV 例程200篇】23. 图像添加中文文字

    [OpenCV 例程200篇]23. 图像添加中文文字 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 OpenCV ...

  4. 【OpenCV 例程200篇】22. 图像添加非中文文字

    [OpenCV 例程200篇]22. 图像添加非中文文字 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 函数 cv2 ...

  5. Opencv+Python学习记录9:掩膜(掩码)的使用(内附详细代码)

    一,基本概念 OpenCV中的很多函数都会指定一个掩模,也被称为掩码,例如: 计算结果=cv2.add(参数1,参数2,掩模) 当使用掩模参数时,操作只会在掩模值为非空的像素点上执行,并将其他像素点的 ...

  6. 【OpenCV 例程200篇】22. 图像添加非中文文字(cv2.putText)

    『youcans 的 OpenCV 例程200篇 - 总目录』 [youcans 的 OpenCV 例程200篇]22. 图像添加非中文文字 函数 cv2.putText() 用于在图像上绘制文本字符 ...

  7. Python为图像添加文本内容(Writing Text on Image)

    Python为图像添加文本内容(Writing Text on Image) #原始图像 #图像添加文本 # from PIL import Image, ImageDraw, ImageFontim ...

  8. opencv进阶学习笔记13:图像形态学操作大全(膨胀,腐蚀,开闭,黑帽,顶帽,梯度)python版

    基础版学习笔记: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 基础版形态学: opencv学 ...

  9. OpenCV Python教程(2、图像元素的访问、通道分离与合并)

    OpenCV Python教程之图像元素的访问.通道分离与合并 转载请详细注明原作者及出处,谢谢! 访问像素 像素的访问和访问numpy中ndarray的方法完全一样,灰度图为: [python] v ...

最新文章

  1. php final这个关键词代表什么,php面向对象之final关键字用法及实例
  2. 可以ping通但远程桌面不行_【第1624期】HTML5:lt;agt;的ping属性之死亡ping与隐私追踪...
  3. 测试你的Python 水平----7
  4. TabBarController创建及使用方法简介
  5. iOS 5 Storyboard 学习之 Tabbar Controller,Navigation Controller
  6. 谈谈lucene的DocValues特性之SortedNumericDocValuesField
  7. HDU2012 素数判定【入门】
  8. Unity3D之UGUI基础4:Button按钮
  9. 统计数据库表中记录数
  10. to teacher eulogy
  11. signature=a50e5f0f4a417f58d5844d45a67fb641,angular中文转拼音工具
  12. excel之筛选、删除技巧
  13. 谈谈如何设计秒杀服务
  14. linux指令——刘雯丽
  15. linux下防火墙iptables用法规则详解
  16. 动态加载当前年份的前五年后十年
  17. 数据中心电气施工工序工艺管理要点
  18. 舒尔特注意力训练网页版
  19. 原命题等价于逆否命题。用于理解素数判断6X法
  20. SSOP封装和TSSOP封装能否兼容?

热门文章

  1. R语言中可视化图像的标题太长如何进行换行?
  2. 51nod-1019 逆序数
  3. MAC OS 如何修改“文件”或“文件夹”的“创建时间”和“修改时间”
  4. UVa340 Master-Mind Hints 猜数字游戏的提示 题解
  5. 【C++基础】auto关键字(C++11)(auto的使用细则;auto不能推导的场景;auto的使用场景;基于范围的for循环)
  6. Intellij IDEA最全的快捷键整理,中英双语
  7. B站服务器数据协议,B站直播间协议指南
  8. VCS仿真和多个test用urg工具生成coverage文件verdi查看--转载
  9. mapbox 天地图 底图切换组件
  10. 将macast的投屏web端渲染改为edge浏览器打开