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

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

putText()的用法:
opencv3.3.0图片上添加中文字幕_第1张图片

opencv3.3.0图片上添加中文字幕_第2张图片

    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提供的字体:
opencv3.3.0图片上添加中文字幕_第3张图片

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

# -*- coding: utf-8 -*-
# @Time    : 2017/11/12 12:05
# @Author  : aikes
# @Email   : [email protected]
# @File    : chinese_font.py
# @Software:    python3.6.3
#               opencv3.3.0
#               pyqt5
#               pycharm 2017.2


from PIL import Image, ImageDraw, ImageFont
import cv2
import numpy as np

frame = 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()

opencv3.3.0图片上添加中文字幕_第4张图片

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

你可能感兴趣的:(python3.6,opencv3.3)