OpenCV添加中文(五)

简介: OpenCV添加文字的方法putText(...),添加英文是没有问题的,但如果你要添加中文就会出现“???”的乱码,需要特殊处理一下。下文提供封装好的(代码)方法,供OpenCV添加中文使用。往期目录视频人脸检测——Dlib版(六)OpenCV添加中文(五)图片人脸检测——Dlib版(四)视...

OpenCV添加文字的方法putText(...),添加英文是没有问题的,但如果你要添加中文就会出现“???”的乱码,需要特殊处理一下。

下文提供封装好的(代码)方法,供OpenCV添加中文使用。

往期目录

视频人脸检测——Dlib版(六)
OpenCV添加中文(五)
图片人脸检测——Dlib版(四)
视频人脸检测——OpenCV版(三)
图片人脸检测——OpenCV版(二)
OpenCV环境搭建(一)
更多更新,欢迎访问我的github:https://github.com/vipstone/faceai

效果预览

img_69b0f0ad80af94cc7d73430bcc0e0120.png

实现思路

使用PIL的图片绘制添加中文,可以指定字体文件,那么也就是说使用PIL可以实现中文的输出。

有思路之后,接下来的工作就简单了。

  1. OpenCV图片格式转换成PIL的图片格式;
  2. 使用PIL绘制文字;
  3. PIL图片格式转换成OpenCV的图片格式;

代码分解

OpenCV图片转换为PIL图片格式

img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))

使用PIL绘制文字

draw = ImageDraw.Draw(img)
fontText = ImageFont.truetype("font/simsun.ttc", textSize, encoding="utf-8")
draw.text((left, top), "文字内容", textColor, font=fontText)

字体文件为:simsun.ttc,Windows可以在C:\Windows\Fonts下面查找。

PIL图片格式转换成OpenCV的图片格式

cv2.cvtColor(numpy.asarray(img), cv2.COLOR_RGB2BGR)

完整代码

封装好的完整方法

#coding=utf-8
#中文乱码处理

import cv2
import numpy
from PIL import Image, ImageDraw, ImageFont

def cv2ImgAddText(img, text, left, top, textColor=(0, 255, 0), textSize=20):
    if (isinstance(img, numpy.ndarray)):  #判断是否OpenCV图片类型
        img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    draw = ImageDraw.Draw(img)
    fontText = ImageFont.truetype(
        "font/simsun.ttc", textSize, encoding="utf-8")
    draw.text((left, top), text, textColor, font=fontText)
    return cv2.cvtColor(numpy.asarray(img), cv2.COLOR_RGB2BGR)

代码调用

img = cv2ImgAddText(img, "大家好,我是星爷", 140, 60, (255, 255, 0), 20)
img_fa0be433d68c8212b2b0b3b1a564ccb1.png
如果本文对你有所帮助,请打赏——1元就足够感动我:)
支付宝打赏 微信打赏
联系邮箱:intdb@qq.com
我的GitHub: https://github.com/vipstone
关注公众号: img_9bde0f31ac4a0eca10b1bd7414b78faf.png


作者: 王磊
出处: http://vipstone.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,请标明出处。

相关文章
|
网络协议 JavaScript 前端开发
netty 实现 websocket
netty 实现 websocket
591 1
|
机器学习/深度学习 人工智能 算法
基于FPGA的SNN脉冲神经网络之IM神经元verilog实现,包含testbench
本内容介绍了一种基于Izhikevich-Memristive(IM)神经元模型的算法,该模型结合忆阻器特性和神经元动力学,适用于神经形态计算。算法通过Vivado2019.2运行,提供无水印运行效果预览及部分核心程序,完整版含中文注释与操作视频。理论部分详细解析了Izhikevich神经元方程及其放电行为,包括膜电位、恢复变量等参数的作用,并探讨了IM模型在人工智能和脑机接口领域的应用潜力。
|
小程序 Java 关系型数据库
基于SpringBoot招聘管理系统设计和实现(源码+LW+调试文档+讲解等)
基于SpringBoot招聘管理系统设计和实现(源码+LW+调试文档+讲解等)
|
文字识别 BI API
3.4K star!全能PDF处理神器开源!文档转换/OCR识别一键搞定
PDF-Guru 是一款开箱即用的全能型PDF处理工具,支持跨平台文档转换、智能OCR识别、多格式解析等核心功能。项目采用模块化架构设计,提供简洁的Web界面和API接口,开发者可快速集成到现有系统中。
1204 1
|
机器学习/深度学习 自然语言处理 测试技术
社区供稿 | 封神榜团队揭秘大模型训练秘密:以数据为中心
近一年来,各种各样的开源和闭源的大语言模型,不断在多个中文英文的测试基准中刷新着记录。然而,大语言模型的开发仍然面临诸多挑战,比如从头开始训练大语言模型的高昂成本,以及继续预训练导致的灾难性遗忘等等。尽管许多研究致力于解决这些问题,但一个重要而且实际的限制是,许多研究过于追求扩大模型规模,没有全面分析和优化预训练数据在训练大语言模型过程中的使用。
|
人工智能 IDE 开发工具
《C++人工智能开发 IDE 全解析:助力智能创新之路》
本文深入探讨了几款适合 C++ 人工智能开发的 IDE,包括 Visual Studio、CLion、Eclipse CDT 和 Qt Creator。每款 IDE 都有其独特的优势,如 Visual Studio 的强大调试工具、CLion 的代码导航和 CMake 支持、Eclipse CDT 的跨平台能力和丰富的插件生态系统,以及 Qt Creator 在界面开发方面的卓越表现。开发者应根据项目需求、团队协作和个人习惯选择最合适的 IDE,以提升开发效率和体验。
601 16
|
机器学习/深度学习 人工智能 计算机视觉
《深度剖析:一文读懂卷积神经网络中的感受野》
感受野是卷积神经网络(CNN)中关键概念,指神经元在输入数据中对应的区域大小。它影响模型对特征的捕捉能力,决定局部与全局特征的提取。单层卷积的感受野由卷积核大小、步长和填充决定;多层卷积时感受野会逐层累加扩大。合适感受野能提升模型性能,过大或过小都会影响效果。调整感受野可通过改变卷积核大小、步长或使用空洞卷积实现。深入理解感受野有助于优化CNN设计,推动AI技术发展。
957 4
|
边缘计算 人工智能 安全
探索边缘计算:定义、优势及未来趋势
探索边缘计算:定义、优势及未来趋势
|
存储 关系型数据库 Linux
在CentOS 7上安装和使用Docker的方法
在CentOS 7上安装和使用Docker的方法
1709 1
|
Java Linux API
手把手教你如何通过Java给图片添加文字和图片水印(一)
手把手教你如何通过Java给图片添加文字和图片水印(一)
2215 0
手把手教你如何通过Java给图片添加文字和图片水印(一)