opencv3.3.0图片上添加中文字幕

来源:互联网 发布:天猫淘宝商城男装外套 编辑:程序博客网 时间:2024/04/26 11:36

说明
opencv3.3.0本身的putText()用于在图像上添加字符串,但没有提供中文的字库。
参见opencv文档:
https://docs.opencv.org/master/d6/d6e/group__imgproc__draw.html#ga5126f47f883d730f633d74f07456c576

putText()的用法:
这里写图片描述

这里写图片描述

    void cv::putText(          cv::Mat& img, // 待绘制的图像          const string& text, // 待绘制的文字          cv::Point origin, // 文本框的左下角          int fontFace, // 字体 (如cv::FONT_HERSHEY_PLAIN)          double fontScale, // 尺寸因子,值越大文字越大          cv::Scalar color, // 线条的颜色(RGB)          int thickness = 1, // 线条宽度          int lineType = 8, // 线型(4邻域或8邻域,默认8邻域)          bool bottomLeftOrigin = false // true='origin at lower left')

opencv提供的字体:
这里写图片描述

参考一些博客的说明,可以用FreeType的方法,也可以采用PIL内Image的方法实现中文字幕,这里给出PIL的方法,感觉比较简单实用。
以下代码片段在win7 32笔记本上测试通过。

# -*- coding: utf-8 -*-# @Time    : 2017/11/12 12:05# @Author  : aikes# @Email   : 13937992699@139.com# @File    : chinese_font.py# @Software:    python3.6.3#               opencv3.3.0#               pyqt5#               pycharm 2017.2from PIL import Image, ImageDraw, ImageFontimport cv2import numpy as npframe = cv2.imread('c://monroe1.png')frame_cv2 = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)frame_pil = Image.fromarray(frame_cv2)  #转为PIL的图片格式draw = ImageDraw.Draw(frame_pil) font = ImageFont.truetype("simhei.ttf", 50, encoding="utf-8")    # 第一个参数为字体,中文黑体    # 第二个为字体大小ImageDraw.Draw(frame_pil).text((100, 20), "生日快乐!", (0, 0, 255), font)'''    frame_pil:目标图像    第一个参数为打印的坐标    第二个为打印的文本    第三个为字体颜色    第四个为字体'''frame_cv2 = cv2.cvtColor(np.array(frame_pil), cv2.COLOR_RGB2BGR)cv2.imshow("img", frame_cv2)if cv2.waitKey(0)==ord('q'):cv2.destroyAllWindows()

这里写图片描述

关于中文字体
本例中采用的simhei.ttf,就是windows自带的简体黑体中文,在c://windows下搜索各种字体应有尽有,只需将代码中的字体替换即可,注意要把路径一并键入。