大家在使用python的cv2库处理图像时经常会有需要在图像的某处输出一些文字,常用的方法是利用cv2.puttext函数在图像某个坐标位置添加文字,但是这个函数无法输出utf-8类型的字符,因此只能输出英文或者数字而无法直接在图像中添加中文描述。用百度搜这个问题常见的解决办法是利用freetype来解决,但是这种办法需要将字符编码解码比较麻烦,这里推荐一个简单的在图像中添加中文的办法:利用pil的image函数在图像中添加中文,然后再转回cv2的格式。
百度搜索结果
实现过程
这里为了方便以从网络上随便下载的头条logo图像为例,图像如下:
这里默认运行环境是python3,首先需要下载中文支持的相关字体,这里我下载了黑体中文字体simhei.ttf,百度搜索即可找到下载资源。将字体放在磁盘中某个事先指定的位置。
安装相关包,需要import的有以下库
除了cv2,还需要安装pil和numpy两个库,都是pip install 即可完成安装。
上图第一句是读入图像,这里函数第一个参数是图像位置,根据具体放的位置修改就好。 第二句是将图像转到image格式。第三句建立一个draw对象用来画图或者添加文字,最后一句加载字体,这里同样将路径修改为实际放的位置即可。50是字的大小,根据实际情况调整,这里我为了显示明显设置的比较大。
接下来就可以添加文字了,draw.text函数在图像数组中加入文字,(0,0)是插入文字的坐标,根据实际情况调整。‘今日头条’是插入的具体文字内容,(0,0,0)是文字的颜色,这里使用了全0的黑色为例。
最后将图像变换为cv2的array格式,保存图像,打开图像如下图,可以看出图像左上角已经成功添加了中文文字。