OpenCV图像处理:在图片上显示中英文文字
创作时间:
作者:
@小白创作中心
OpenCV图像处理:在图片上显示中英文文字
引用
CSDN
1.
https://m.blog.csdn.net/gxz888/article/details/140507939
OpenCV是一个强大的计算机视觉库,广泛应用于图像处理和计算机视觉任务。在本教程中,我们将学习如何在图像上添加文字,包括英文和中文。
使用OpenCV添加英文文字
OpenCV提供了多种内置字体样式,可以通过cv2.putText
函数添加英文文字。以下是一些可用的字体样式:
cv2.FONT_HERSHEY_SIMPLEX
- 正常大小的无衬线字体。cv2.FONT_HERSHEY_PLAIN
- 小尺寸的无衬线字体。cv2.FONT_HERSHEY_DUPLEX
- 正常大小的无衬线字体,比FONT_HERSHEY_SIMPLEX
更厚。cv2.FONT_HERSHEY_COMPLEX
- 正常大小的衬线字体。cv2.FONT_HERSHEY_TRIPLEX
- 正常大小的衬线字体,比FONT_HERSHEY_COMPLEX
更厚。cv2.FONT_HERSHEY_COMPLEX_SMALL
- 较小的衬线字体。cv2.FONT_HERSHEY_SCRIPT_SIMPLEX
- 手写风格的无衬线字体。cv2.FONT_HERSHEY_SCRIPT_COMPLEX
- 手写风格的衬线字体。cv2.FONT_ITALIC
- 斜体字的标志,可以与上述任何字体结合使用。
下面是一个示例代码,演示如何在图像上添加不同字体的英文文字:
# -*- coding: utf-8 -*-
import cv2
import numpy as np
# 1.创建一个黑色的空白图像
img = np.zeros((600, 800, 3), np.uint8)
# 2.图像添加文字
text = 'Hello, OpenCV2024'
# 字体列表
fontList = [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]
fontScale = 1 # 字体缩放比例
color = (255, 255, 255) # 字体颜色白色
# 3.遍历字体列表
for i in range(len(fontList)):
pos = (10, 50 * (i + 1)) # 显示位置
img_Text = cv2.putText(img, text, pos, fontList[i], fontScale, color)
# 4.显示图像
cv2.imshow("Text Example", img_Text)
cv2.waitKey(0)
cv2.destroyAllWindows()
使用Pillow添加中文文字
由于OpenCV不支持中文字符,我们需要借助Pillow库来实现中文文字的添加。具体步骤如下:
- 使用Pillow创建一个文本图像
- 将Pillow图像转换为OpenCV图像格式
下面是一个示例代码,演示如何在图像上添加中文文字:
# -*- coding: utf-8 -*-
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont
# 1.加载原始图像
original_image = cv2.imread('example.png')
# 2.设置中文字体路径(确保路径正确)
font_path = 'simkai.ttf' # 替换为你的中文字体路径
font_size = 30
font_color = (255, 255, 0) # 黄色
text = '我的Python教程@小红牛'
# 3.使用Pillow创建文本图像
img_pil = Image.fromarray(cv2.cvtColor(original_image, cv2.COLOR_BGR2RGB))
print('1.原图的宽高:', img_pil.width, img_pil.height)
draw = ImageDraw.Draw(img_pil)
font = ImageFont.truetype(font_path, font_size)
bbox = draw.textbbox((0, 0), text, font=font)
text_width = bbox[2] - bbox[0]
text_height = bbox[3] - bbox[1]
print('2.水印文字的大小:', text_width, text_height)
# 4.计算水印,显示的位置,这里假设放在右下角
# 获取原始图像的宽高
original_width, original_height = img_pil.size
text_position = (original_width - text_width-50, original_height - text_height-50)
print('3.计算水印显示的位置:', text_position)
# 5.在Pillow图像上绘制文本
draw.text(text_position, text, font=font, fill=font_color)
# 6.将Pillow图像转换回OpenCV图像
text_image = cv2.cvtColor(np.array(img_pil), cv2.COLOR_RGB2BGR)
cv2.imshow('Image with text', text_image)
cv2.imwrite('result.png', text_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
通过以上步骤,我们可以在图像上成功添加中文文字。这个方法不仅适用于中文,也适用于其他非英文字符。
热门推荐
吃3种药血压都降不下来,从这5个方面找原因,是否含有这类药
巴西木冬季养护:温度、光照、浇水这样管,轻松过冬
8-10℃是关键,冬季巴西木养护五大要点
巴西木养护指南:光照、温度、浇水等六大要点详解
双色球选号攻略:用数学模型提高中奖概率
一起彩教你用概率论玩转双色球
象棋教育迎来新突破:张芮鸣创新“AI育棋法”融合传统与科技
回顾:人去世后为何要烧纸?延续千年的习俗,当然不仅仅是一种迷信
四合院东西厢房有高低之分吗?
古代大户人家的房屋布局有何讲究?
三合院九宫风水布局,杨明德大师的贴心提醒
清明节烧纸钱祭祖是迷信吗?网友:并非无中生有,从古代就开始了
每年什么时候需要烧纸 全年祭祀烧纸的日子汇总
有人说,80后可能是最后一代拜山祭祖的人了……
福州市万福寺游览指南
安全隐患致汉正街市场关闭,6月完成整体搬迁
格鲁吉亚拉里汇率暴跌,你的钱包还好吗?
格鲁吉亚拉里汇率走强,投资入籍计划引关注
小红书更新惹争议,海外用户涌入带来新挑战
数据世界里的平衡点:平均数揭秘
算术平均、几何平均、调和平均的区别与使用场景
相机镜头竞品选型的主要参考参数和选型方法
iPhone发烫有救了!重启、散热等8大降温技巧
6G时代来临:中国领跑,美日紧追,六大场景重塑通信未来
电子交付省时省钱又环保,无需物流发货模式走红
德军三号突击炮:从原型到经典,二战反坦克利器的诞生
Fw 190与Hs 129:库尔斯克战役的德军航空装备
零基础也能学会!动态图片制作全流程详解
《鬼打鬼》再登热搜,洪金宝经典再现
洪金宝VS成龙:谁才是真正的功夫之王?