使用 OpenCV 在图像中添加文字

在图像处理任务中,我们经常需要将文本添加到图像中。OpenCV 提供了 cv2.putText() 函数,可以很方便地在图像上绘制文本,支持多种字体、颜色、大小和位置等参数。

本文将详细介绍如何使用 OpenCV 在图像中添加文字,介绍 cv2.putText() 的语法、参数及使用示例。

1. cv2.putText() 函数简介

cv2.putText() 是 OpenCV 中的一个函数,用于在图像上绘制文本。通过该函数,我们可以指定文本的内容、位置、字体、大小、颜色等属性。

函数语法:

cv2.putText(image, text, org, fontFace, fontScale, color, thickness, lineType=cv2.LINE_AA)

参数说明:

  • image:输入图像,文本将被添加到该图像上。
  • text:要绘制的文本字符串。
  • org:文本的左下角坐标 (x, y),即文本起始点的位置。
  • fontFace:字体类型。OpenCV 提供了几种字体类型,常用的有 cv2.FONT_HERSHEY_SIMPLEX
  • fontScale:字体大小,通常为浮动值,值越大字体越大。
  • color:文本颜色,指定为 BGR 格式的颜色元组(例如 (255, 0, 0) 表示蓝色)。
  • thickness:文本的粗细程度。值越大,文本的边缘就越粗。
  • lineType:线型,通常设置为 cv2.LINE_AA,表示抗锯齿线条,效果更加平滑。

2. 基本示例:在图像中写文字

我们将通过一个简单的示例,展示如何在图像上添加文本。

示例代码:

import cv2
import numpy as np# 创建一个白色背景的图像
image = np.ones((400, 600, 3), dtype=np.uint8) * 255# 要写入的文本
text = "Hello, OpenCV!"# 设置文本的位置(左下角)
org = (50, 200)# 设置字体、大小、颜色和粗细
font = cv2.FONT_HERSHEY_SIMPLEX
font_scale = 1.5
color = (0, 0, 255)  # 红色
thickness = 2# 在图像上添加文本
cv2.putText(image, text, org, font, font_scale, color, thickness)# 显示图像
cv2.imshow("Text on Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

代码解析:

  1. 创建图像:我们创建了一幅 400x600 的白色背景图像(np.ones((400, 600, 3), dtype=np.uint8) * 255)。
  2. 定义文本:定义要写入的文本为 "Hello, OpenCV!"
  3. 设置文本属性
    • org:指定文本的起始位置 (50, 200),即文本的左下角位置。
    • font:设置字体为 cv2.FONT_HERSHEY_SIMPLEX,这是一种简单的字体。
    • font_scale:设置字体大小为 1.5
    • color:设置文本颜色为红色((0, 0, 255),BGR 格式)。
    • thickness:设置文本的粗细为 2
  4. 绘制文本:调用 cv2.putText() 在图像上绘制文本。
  5. 显示图像:使用 cv2.imshow() 显示图像,并在按下任意键后关闭窗口。

3. 更改字体类型和大小

OpenCV 支持几种常用的字体类型,常见的包括:

  • 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:复杂的手写字体。

示例:使用不同的字体

import cv2
import numpy as np# 创建一个白色背景的图像
image = np.ones((400, 600, 3), dtype=np.uint8) * 255# 要写入的文本
text = "Font Example!"# 设置文本的位置(左下角)
org = (50, 200)# 设置字体、大小、颜色和粗细
font = cv2.FONT_HERSHEY_DUPLEX
font_scale = 2
color = (0, 255, 0)  # 绿色
thickness = 3# 在图像上添加文本
cv2.putText(image, text, org, font, font_scale, color, thickness)# 显示图像
cv2.imshow("Text with Different Font", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

4. 文本对齐

在 OpenCV 中,文本的位置通常是从文本的左下角开始指定的(即 (x, y) 坐标)。如果你需要更精确的文本对齐(例如居中、右对齐),你需要根据文本的大小进行计算。可以使用 cv2.getTextSize() 函数来获取文本的大小,然后进行适当的调整。

示例:文本居中对齐

import cv2
import numpy as np# 创建一个白色背景的图像
image = np.ones((400, 600, 3), dtype=np.uint8) * 255# 要写入的文本
text = "Centered Text"# 获取文本大小
(font_width, font_height), baseline = cv2.getTextSize(text, cv2.FONT_HERSHEY_SIMPLEX, 1, 2)# 计算文本的起始位置,使其居中
org = ((image.shape[1] - font_width) // 2, (image.shape[0] + font_height) // 2)# 在图像上添加文本
cv2.putText(image, text, org, cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)# 显示图像
cv2.imshow("Centered Text", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

代码解析:

  1. 获取文本大小cv2.getTextSize() 函数返回一个元组 (font_width, font_height),表示文本的宽度和高度,以及 baseline(基线的偏移量)。
  2. 计算居中位置:通过 (image.shape[1] - font_width) // 2 计算文本水平居中的位置,通过 (image.shape[0] + font_height) // 2 计算文本垂直居中的位置。
  3. 绘制文本:将计算好的坐标传入 cv2.putText()

5. 总结

在 OpenCV 中,使用 cv2.putText() 函数,我们可以轻松地在图像上添加各种文本。可以通过调整字体类型、大小、颜色、粗细等属性,来满足不同的需求。同时,通过计算文本的尺寸,还可以实现文本的精确对齐(如居中、右对齐等)。这些操作在图像标注、生成图表、图像处理和计算机视觉任务中都非常有用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/65243.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何高效学习PHP框架源码

为什么学习php框架源码 学习PHP框架源码是软件开发领域中的一个重要环节,它带来了诸多益处,无论是对于个人技能的提升,还是对于实际项目开发的优化,都有着不可忽视的作用。以下是一些具体的原因,解释了为什么学习PHP框…

HAL库STM32硬件IIC驱动数字电位器MCP4017

目录 一、芯片特性 二、硬件电路 三、工程搭建 四、IIC硬件地址 五、驱动程序 项目需要,最近用到了一个IIC接口的数字电位器,型号:MCP4017T-502E。对应阻值5K,使用STM32G030F6的硬件IIC驱动,发现简单的不得了&…

git设置项目远程仓库指向github的一个仓库

要将你的Git项目设置为指向GitHub上的远程仓库,你需要执行以下步骤: 创建GitHub仓库: 登录到你的GitHub账户。点击右上角的 “” 号,选择 “New repository” 创建一个新的仓库。填写仓库的名称,可以添加描述&#xff…

Vim 编辑器详细教程

Vim 编辑器详细教程 Vim 是一个强大的文本编辑器,以其高效的编辑能力和强大的功能著称,特别适合程序员和文字处理工作者。以下是一个详细的 Vim 教程,从基础操作到高级用法。 1. Vim 基础操作 1.1 Vim 的三种模式 正常模式(Nor…

uni-app 中使用微信小程序第三方 SDK 及资源汇总

🎀🎀🎀uni-app 跨端开发系列 🎀🎀🎀 一、uni-app 组成和跨端原理 二、uni-app 各端差异注意事项 三、uni-app 离线本地存储方案 四、uni-app UI库、框架、组件选型指南 五、uni-app 蓝牙开发 六、uni-app …

17.2、应急事件场景与处理流程

目录 常见网络安全应急事件场景网络安全应急处理流程应急演练类型 常见网络安全应急事件场景 应急事件的处理场景,分成四类场景,恶意程序事件,网络攻击事件,还有网站相关的一些安全事件,最后是拒绝服务事件 恶意程序…

PostgreSQL表达式的类型

PostgreSQL表达式是数据库查询和操作中非常重要的组成部分。它们由一个或多个值、运算符和PostgreSQL函数组合而成,用于求值或执行特定的操作。PostgreSQL表达式类似于公式,是用查询语言编写的。它们可以用于查询数据库中的特定数据集,或者在进行数据操作时执行计算和逻辑判…

.NET能做什么?全面解析.NET的应用领域

.NET 是由微软开发的一个开源、跨平台的开发框架。它不仅支持构建各种应用程序,还能运行在不同的操作系统上,包括 Windows、Linux 和 macOS。自从 .NET Core 的推出,.NET 成为了一个现代化的开发平台,能够满足企业和开发者日益多样…

19_HTML5 Web Workers --[HTML5 API 学习之旅]

HTML5 Web Workers 是一种允许 JavaScript 在后台线程中运行的技术,从而不会阻塞用户界面或其他脚本的执行。通过使用 Web Workers,你可以执行复杂的计算任务而不影响页面的响应速度,提升用户体验。 Web Workers 的特点 Web Workers 是 HTM…

十二、SQL 进阶:高级技巧提升查询效率实战指南

SQL 进阶:高级技巧提升查询效率实战指南 一、索引优化:数据库的“高速公路” 索引犹如图书馆里的书籍索引卡,可使数据库迅速定位所需数据,避免全表扫描。例如,在存储员工信息的表employees(包含字段emplo…

Java 23和JDK 23详细安装方法,常用命令使用等

Java JDK 23 是 Oracle 提供的最新版本的 Java 开发工具包,它包含了 Java 编程语言的最新特性和改进。本教程将介绍如何安装 JDK 23,并详细讲解一些常用的命令和用法。 一、安装 JDK 23 下载 JDK 23: 提供了 Windows、macOS 和 Linux 的安装…

红黑树 Red-Black Tree介绍

1. 红黑树的定义 红黑树是一种具有如下性质的二叉搜索树: 每个节点是红色或黑色。根节点是黑色。所有叶子节点都是黑色的空节点(NIL节点),即哨兵节点。如果一个节点是红色,那么它的子节点一定是黑色。(不存…

《解锁 Python 数据挖掘的奥秘》

《解锁 Python 数据挖掘的奥秘》 一、Python 数据挖掘基础(一)Python 基础与数据挖掘环境搭建(二)数据挖掘基本流程概述 二、Python 数据挖掘核心技术(一)数据收集与预处理技术(二)常…

爆改RagFlow

Rag理论概述 由近期 RAGFlow 的火爆看 RAG 的现状与未来 Ragflow解析参数说明 ♥ RagFlow源码解析 实际的文件解析通过接口 /v1/document/run 进行触发的,实际的处理是在 api/db/services/task_service.py 中的 queue_tasks() 中完成的,此方法会根据文件…

【GeekBand】C++设计模式笔记15_Proxy_代理模式

1. “接口隔离” 模式 在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题,甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来互相紧密关联的接口是一种常见的解决方案。典型模式 FacadeProxyAdapte…

OpenTK 中帧缓存的深度解析与应用实践

摘要: 本文深入探讨了 OpenTK 中帧缓存的使用。首先介绍了帧缓存的基本概念与在图形渲染管线中的关键地位,包括其与颜色缓存、深度缓存、模板缓存等各类缓存的关联。接着详细阐述了帧缓存对象(FBO)的创建、绑定与解绑等操作,深入分析了纹理附件、渲染缓冲区附件在 FBO 中的…

springboot测试类里注入不成功且运行报错

目录 出错信息 原因 出错信息 写测试类的时候,一直说我注入不成功 而且我运行的时候报错了 java.lang.IllegalStateException: Unable to find a SpringBootConfiguration, you need to use ContextConfiguration or SpringBootTest(classes...) with your te…

Docker下TestHubo安装配置指南

TestHubo是一款开源免费的测试管理工具, 下面介绍Docker 私有部署的安装与配置。TestHubo 私有部署版本更适合有严格数据安全要求的企业,支持在本地或专属服务器上运行,以实现对数据和系统的完全控制。 1、Docker 服务端安装 Docker安装包下…

Redis实战篇(四、高级数据结构的使用)

目录 五、达人探店 1.发布探店笔记 2.查看探店笔记 3.点赞功能 4.点赞排行榜 六、好友关注 1.关注和取消关注 2.共同关注 3.关注推送 (1)Feed流实现方案分析 (2)推送到粉丝收件箱 (3)实现分页查询…

基本操作:iframe、alert

背景 如果你的目标元素出现在一个iframe标签下,则不能直接定位,必须先完成切换才能进行定位操作,如下图 整个理解为一个大的房间,里面是客厅,driver进到客厅后,如果想操作iframe A里的数据,需…