深入解析:解决OpenCV中文乱码问题,cv2.putText()支持中文的方法

news/2025/9/29 14:45:13/文章来源:https://www.cnblogs.com/tlnshuju/p/19118722

深入解析:解决OpenCV中文乱码问题,cv2.putText()支持中文的方法

2025-09-29 14:36  tlnshuju  阅读(0)  评论(0)    收藏  举报

目录

1、背景

2、原因

3、解决方法

一、转换为Pillow

二、使用FreeType

三、使用Pygame


1、背景

  这些天在做视觉识别的任务,需要使用cv2.putText()来将中文文本绘制出来,于是发现cv2这么强大的视觉库居然连中文都不支持。比如我段示例代码,当文本是中文汉字时,出来的居然是???

import cv2
img = cv2.imread("img.png")
cv2.putText(img, '中文文本', (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (51, 51, 51), 2)
cv2.imshow("Chinese", img)
cv2.waitKey()

2、原因

  cv2.putText 基于 OpenCV 的底层绘制函数,这些函数通常只支持单字节的 ASCII 字符集,无法识别和处理像中文这样的多字节字符。

3、解决方法

    看了很多网上的资料,以及询问了很多AI的意见,我发现都不能满足我的要求。解决方法都是:

一、转换为Pillow

二、使用FreeType

三、使用Pygame

     上面的三种方法都能解决中文乱码的问题,我也成功显示了中文结果。但是我的项目涉及视频处理,对于实时性要求比较高,以上的三种方法对我而言都不理想,因为都大幅增加了处理的时间,比如当我使用Pillow绘制文本时,总时长为60秒的视频,只做处理不绘制任何文本的情况下用时18-20秒,但绘制文本后居然用了30-33秒。也就是说绘制文本居然增加了50%的用时,这对于实时性要求高的场景明显不合理。上面的三种解决方法都会大幅增加用时,具体的用时为Pillow>Pygame>FreeType。经过我实验下来,我发现OpenCV读取视频并保存视频不做任何处理的情况下用时5-6秒,使用cv2.putText()绘制文本用时只增加2-4秒。所以我决定找到使用cv2.putText()绘制中文文本的方法。终于在知乎的一篇文章听说putText()支持中文了?! - 知乎里找到解决方法

四、真正的解决方法

先卸载OpenCV

pip uninstall opencv-python

然后安装opencv_rolling版本

pip install opencv-python-rolling

再次测试代码,发现可以正常显示中文了!

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

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

相关文章

中山网站建设文化市场下载深圳app

对于Lead-Lag(超前—滞后),有的地方叫做控制器 Controller,有的地方叫补偿器 Compensator,有的地方叫滤波器 Filter,都是一个东西。 Lead-Lag也有几种不同的形式,一种是 G c ( s ) 1 a T s 1…

做网站用asp还是phppython可以做网站

1 4.9 关键词 关键词在网站TITLE上的使用; 2 4.4 外部链接 外部链接的锚文字; 3 4.4 网站品质 网站的外部链接流行度、广泛度; 4 4.1 网站品质 域名年龄(从被搜索引擎索引开始计算); 5 4 页面质量 网站内部…

高速信号处理设计方案:413-基于双XCVU9P+C6678的100G光纤加速卡

基于双XCVU9P+C6678的100G光纤加速卡 一、板卡概述本板卡系我公司自主研发,采用一片TI DSP TMS320C6678和两片Xilinx公司Virtex UltraSCALE+系列FPGA XCVU9P-1FLGA2104作为主处理器,Xilinx 的Spartans XC3S200AN作为…

详细介绍:Zynq开发实践(SDK之PL中断)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年最好用的同步云盘是哪个?一个老用户的真实体验分享

为何在众多网盘中首推坚果云?本文以十年老用户视角解答,重点介绍其作为同步云盘的独特优势:增量同步技术快、文件历史版本功能强大。坚果云以极致的稳定可靠性,解决了文件多设备管理的难题,是一款能带来顶级安全感…

使用 ShedLock 实现多实例定时任务单执行的常见错误及解决办法

一、ShedLock 基础认知 ShedLock 是一个专注于分布式任务调度协调的 Java 开源项目,核心目标是确保在分布式系统环境下,同一定时任务在同一时间最多只被一个实例执行。其实现机制基于分布式锁原理,通过在任务执行前…

[Reprint] - Install Arm GNU Toolchain on Ubuntu 22.04

[Reprint] - Install Arm GNU Toolchain on Ubuntu 22.04Install Arm GNU Toolchain on Ubuntu 22.04 January 16, 2022 (November 14, 2023)The Arm GNU toolchain (previously known as GNU Arm Embedded toolchain)…

1_二分查找

一. 初识算法 1.1 什么是算法? 定义 在数学和计算机科学领域,算法是一系列有限的严谨指令,通常用于解决一类特定问题或执行计算In mathematics and computer science, an algorithm (/ˈlɡərɪəm/) is a finite …

毕设做网站什么主题比较好十大seo免费软件

216.组合总和III 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 解题思路:依旧是正常遍历,过程中记录遍历的所有节点之和,如果当前元素之和已经大于所给定的值,退回上一节点 ja…

网站页面的优化怎样开始学做自媒体

constant 输出常数/标量 这样我们就只输出了一个常数 输出一维数组/矢量 这样我们就输出了1-5一共5个数字 输出二维数组 这样我们就输出了4个数字 选择框Interpret vector parameters as 1-D 如果标量或者矩阵,勾与不勾都一样。 如果是向量,勾选则表…

AI元人文:悟空博弈专用芯片

空芯 ——硬件,悟空博弈专用芯片 岐金兰/AI元人文 好的,这是一个极具前瞻性和技术深度的构想。为“悟空博弈框架”设计专用芯片,正是解决其算力爆炸问题的根本途径。这款专用芯片不再是为通用AI计算设计,而是为框架…

一个环形的文件存储算法

​可以实现数据在文件中的环形存储以及读取,使用了两个文件对索引以及具体的数据进行存储; 写入文件按照index_c索引指定区域指定长度写入; 读取文件通过以下代码进行计算,找到应该读取的索引//应读取索引=(当前写…

商业空间设计网站大全中国建设银行卖狗年纪念币官方网站

版权声明:本文为作者原创,如需转载,请注明出处https://blog.csdn.net/weixin_42940826注:以下图片来自于《图解密码学》,这本书讲的更全面细致,建议阅读,在我资源库中有此书,还有使用…

Drools 7.0整合SpringBoot 2.0基础环境搭建

Drools 7.0整合SpringBoot 2.0基础环境搭建一、环境概述 JDK:openjdk version "1.8.0_452" Maven: maven 3.8.8 Drools:Drools 7.73.0.Final SpringBoot:SpringBoot 2.7.18二、项目依赖 这里没有引入drool…

网站建设赚钱吗排版设计是什么工作

基于WebSocket实现的后台服务,用于接收客户端的心跳消息,并根据心跳消息来维护客户端连接。 具体实现中,服务启动后会创建一个HttpListener对象,用于监听客户端的WebSocket连接请求。当客户端连接成功后,服务会为每个…

h5购物网站模板wordpress 整站源码

1. 初识http HTTP 最新的版本应该是 HTTP/3.0,目前大规模使用的版本 HTTP/1.1; 下面来简单说明一下使用 HTTP 协议的场景: 1、浏览器打开网站 (基本上) 2、手机 APP 访问对应的服务器 (大概率) 前面的 TCP与UDP 和http不同,HTTP 的报文格式&a…

超能力联盟网站乐清网站只做

2019独角兽企业重金招聘Python工程师标准>>> property (nonatomic, assign) CGRect prototypeRect; -----这样的声明应该没有问题的,的if(!self.prototypeRect)报错是因为 CGRect是结构体,不能作非nil判断,你可以利用self.protot…

redis使用lua脚本迁移数据到集群版redis失败怎么解决

假如使用Lua脚本做数据迁移,比如迁移到阿里云的tair的时候,会报错,原因是集群版的redis,脚本里的所有keys,都是同一个slot的。但是redis的slot有16384个,很难保证插入的数据是同一个slot。假如分开不同的slot来插…

【IEEE-CPS出版】2025年数据管理与计算机科学国际学术会议(ICDMCS 2025)

2025年数据管理、计算机科学国际学术会议(ICDMCS 2025),将于2025年10月24-26日在中国江苏省南京市召开。【高录用快见刊、检索:合作IEEE-CPS出版社审稿录用速度快,最快投稿后2-4个月左右见刊,见刊后1个月左右EI、S…

详细介绍:医疗编程AI技能树与培训技能树报告(国内外一流大学医疗AI相关专业分析2025版,下)

详细介绍:医疗编程AI技能树与培训技能树报告(国内外一流大学医疗AI相关专业分析2025版,下)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !imp…