解决OpenCV显示中文乱码(4.11.0)
最近在尝试玩yolov8训练跌倒识别。然后兴高采烈地把状态类别全部换成中文。结果打开推理,全部乱码。
结果一搜索。
🎉破案成功,卷帘门拉下来吧—— OpenCV 版本是:
🥸 4.11.0
也就是说,现在的 OpenCV:
❌ 不支持中文 cv2.putText()
(原始函数)
- 你画中文会直接乱码 →
口口口
复读机上线 - 因为这个版本没带 freetype 模块
- 而 freetype 是必须自己编译进来的模块,pip 装是没有的
🧯 现在有 3 条路可以选
🟡 路线 1:先用 PIL 绘字(你已经快搞定的方案)
优点:
- 简单、直接
- 现有环境不动
缺点:
- 延迟高一点
- 代码写法稍微复杂
🟢 路线 2:装 OpenCV 5.x rolling 版(尝鲜但爽)
命令如下:
pip uninstall opencv-python |
然后直接用 cv2.putText()
绘制中文就不乱码了(OpenCV 5 已内置中文支持 🎉)
用的是 YOLOv8 + Python 3.8,兼容没问题,直接上。
🔴 路线 3:自己编译 OpenCV + freetype(高级玩家专属)
适合愿意追求极致性能、干净优雅、不依赖 PIL 的话。
但 Windows 上编译 OpenCV 就像打一个“Debug 冥想副本”,要下载:
- cmake
- Visual Studio Build Tools
- vcpkg 或手动编译 freetype & harfbuzz
- 手动配置 contrib modules
- CMake config 成功 1 次 = 成就解锁
🤔 总结一下你该选哪个
如果你 | 选这个 |
---|---|
想现在立刻跑,不想动环境 | PIL 方案 ✅ |
想简洁用原生 putText() 写中文 |
rolling 版 OpenCV 5.x ✅ |
想干干净净、延迟低、不装 PIL | 自编译 OpenCV + freetype 🧨(警告级难度) |
突然想起来我的小本本还装了WSL。
直接在Linux环境编译不就好了,何必在win上面折腾。
WSL 是编译 OpenCV 的天选之地,尤其是你不想在 Windows 上点开 57 个对话框和 GUI 的时候。
✅ 用不用 WSL 编译?答案是:
YES,千万别浪费,WSL 更适合编译 OpenCV!
🤔 为什么 WSL 更适合?
比较点 | Windows 编译 | WSL 编译 |
---|---|---|
依赖管理 | 杂乱 + GUI 地狱 | apt 一键装干净爽快 |
脚本运行 | 容易路径问题 | 没有奇怪的盘符 |
构建流程 | Visual Studio + CMake GUI | 命令行走天下 |
中文路径 & 空格 | 容易出事 | 零风险 |
速度 | 会慢一点 | 快很多(尤其用 WSL2) |
✨ WSL 上该怎么做?
以下是极简路线图:
🧱 Step 1:更新系统 & 安装依赖
sudo apt update |
🧬 Step 2:拉源码
git clone https://github.com/opencv/opencv.git |
⚙️ Step 3:CMake 配置
cmake -D CMAKE_BUILD_TYPE=Release \ |
🚀 Step 4:编译并安装
make -j$(nproc) |
大概 10~30 分钟,取决于你的电脑,别急,泡杯枸杞水。
🧪 Step 5:验证中文显示
import cv2 |
import cv2 |
如果没报错 = freetype 模块成功加载!🥳
🧠 Bonus:让你的 Python 用上这个 OpenCV
pip uninstall opencv-python |
import cv2 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Peter-JiY's Blog!
评论