> ## Content Index
> Fetch the complete content index at: https://yinguobing.com/blog/llms.txt
> Use this file to discover other available public pages before exploring further.

# 构建支持中文字符的OpenCV Python包
- URL: https://yinguobing.com/blog/build-opencv-python-package-with-freetype-support/
- Published: 2021-08-10T13:35:19.000Z
- Updated: 2021-08-10T13:35:19.000Z
- Description: 自己动手，丰衣足食
- Author: 尹国冰
- Tags: 图像处理

OpenCV的默认配置不支持在图像中绘制中文字符。要想在图像中绘制中文字符，需要在编译时启用FreeType模块。在上一篇文章中有过说明。

[OpenCV绘制中文字符不常用但是需要掌握![](https://yinguobing.com/blog/favicon.png)尹国冰的博客Yin Guobing![](https://yinguobing.com/blog/content/images/2021/07/conor-luddy-Pz3EHf-KJfc-unsplash-2.jpg)](https://yinguobing.com/blog/draw-chinese-character-with-opencv/)

不过在部署时，使用Python作为开发语言的应用更倾向于使用pip来安装相关依赖，包括OpenCV。OpenCV官方提供了opencv-python系列包，但是，官方提供的opencv-python包没有启用FreeType模块。这种状况下，我们需要自行编译启用FreeType的opencv-python包。以下为具体过程。

环境为Ubuntu 20.04, x64架构。Python 3.8。

### 获取源码

首先从官方代码仓库获取源码。该项目还同时包含了opencv-contrib与opencv-extra，要有耐心。

```bash
git clone --recursive https://github.com/opencv/opencv-python.git
```

代码clone完毕之后检出你要编译的标签。你可以在该项目的release页面找到可用的标签。

### 启用FreeType支持

然后配置cmake选项。使用以下命令启用FreeType支持。

```bash
export CMAKE_ARGS="-DWITH_FREETYPE=ON -DBUILD_opencv_freetype=ON"
```

### 配置编译对象

接下来配置编译对象。OpenCV的Python包有四种可选方案，大概可以分为两组。

第一组为提供了GUI支持的方案，如果你需要使用 `imshow` 函数的话选择这两种。

1. opencv-python。最为常用的OpenCV模块组合。
2. opencv-contrib-python。包含了contrib模块的组合。contrib模块中有一些较新的算法暂时无法并入默认模块中。

第二组为无GUI支持的方案，适合部署在云端服务器或者Docker环境等不需要图像界面的情况。同样也按照是否包含contrib模块细分为两种：

1. opencv-python-headless。
2. opencv-contrib-python-headless。

这里以opencv-contrib-python为例，使用环境变量：

```bash
export ENABLE_CONTRIB=1
```

### 开始编译

配置完成后，使用pip正式开启构建过程。

```bash
pip3 wheel . --verbose
```

注意pip版本不能过低。我使用的是21.1.3。整个编译过程耗时视硬件配置。编译结束后便可获得安装文件。

### 安装

依照常规方式安装即可。例如：

```bash
python3 -m pip install opencv_contrib_python-4.5.3.56-cp38-cp38-manylinux2014_x86_64.whl 
```

### 总结

相比在部署设备或者Docker镜像中编译OpenCV，使用编译好的wheel文件可以缩短部署时间，减小Docker镜像体积。推荐在需要自定义OpenCV组件需求的环境下使用。