• OpenCV显示中文(python)


    OpenCV添加文字的方法putText(…),添加英文是没有问题的,但如果你要添加中文就会出现“???”的乱码,需要特殊处理一下。

    下文提供封装好的(代码)方法,供OpenCV添加中文使用。

    效果预览

    实现思路

    使用PIL的图片绘制添加中文,可以指定字体文件,那么也就是说使用PIL可以实现中文的输出。

    有思路之后,接下来的工作就简单了。

    1.OpenCV图片格式转换成PIL的图片格式;
    2.使用PIL绘制文字;
    3.PIL图片格式转换成OpenCV的图片格式;

    代码分解

    OpenCV图片转换为PIL图片格式

    img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    
    • 1

    使用PIL绘制文字

    draw = ImageDraw.Draw(img)
    fontText = ImageFont.truetype("font/simsun.ttc", textSize, encoding="utf-8")
    draw.text((left, top), "文字内容", textColor, font=fontText)
    
    • 1
    • 2
    • 3

    字体文件为:simsun.ttc,Windows可以在C:\Windows\Fonts下面查找。
    或者linux下:

    wget -c https://files.cnblogs.com/files/xiaochina/simsun.zip
    
    • 1

    PIL图片格式转换成OpenCV的图片格式

    cv2.cvtColor(numpy.asarray(img), cv2.COLOR_RGB2BGR)
    
    • 1

    完整代码

    封装好的完整方法

    #coding=utf-8
    #中文乱码处理
     
    import cv2
    import numpy
    from PIL import Image, ImageDraw, ImageFont
     
    def cv2ImgAddText(img, text, left, top, textColor=(0, 255, 0), textSize=20):
        if (isinstance(img, numpy.ndarray)):  #判断是否OpenCV图片类型
            img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
        draw = ImageDraw.Draw(img)
        fontText = ImageFont.truetype(
            "font/simsun.ttc", textSize, encoding="utf-8")
        draw.text((left, top), text, textColor, font=fontText)
        return cv2.cvtColor(numpy.asarray(img), cv2.COLOR_RGB2BGR)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    代码调用

    img = cv2ImgAddText(img, "大家好,我是星爷", 140, 60, (255, 255, 0), 20)
    
    • 1
  • 相关阅读:
    c语言练习41:深入理解字符串函数strlen strcpy strcat
    工作笔记记录
    技术基建如何降本增效——云迁移
    价格预测KF,MATLAB,完整代码
    NetCore路由的Endpoint模式
    this->使用
    蓝蜂物联网水肥一体化MQTT应用案例
    软件课程设计--仓库管理系统
    Java--正则表达式
    椭球面的切平面
  • 原文地址:https://blog.csdn.net/qq_39523365/article/details/133909518