opencv2的freetype模块不可以使用的代替解决方案

一.起因

首先opencv的puttext函数是不支持中文显示的,如果有中文显示会显示????,但是有的时候我们就是想要显示汉字啊,咋办?OpenCV提供了cv2.freetype()的方法帮助解决问题,但是不要高兴太早,如果我们直接通过终端直接安装,会发现显示cv2' has no attribute 'freetype'也就是说明没有freetype模块,可是如果我们看opencv的官方介绍,可以知道opencv-contrib是有freetype模块的,这是为什么?

pip install opencv-python
或者pip install opencv-contrib-python(官方拓展库,有一些其他拓展)

二.原因

运行下列代码:


import cv2
print(cv2.getBuildInformation())

终端的显示结果如下:
可以发现模块freetype在unavailable中,说明这个模块不在预编译之中,所以我们不可以使用。首先我们可以通过预编译的过程解决,但是笔者是个小白,预编译过程设计Cmake等操作所以我也不会解释这种方法,感兴趣的可以去找找博客(因为你知道是没有预编译的原因就好找多了)
在这里插入图片描述

三.代替方法

路是死的,人是活的,别在一棵树上吊死。我们可以通过别的函数库解决,可能回绕一点弯,但是并不难。

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

#创建空白图像
img=np.zeros((100,300,3),dtype=np.uint8)

#使用PIL绘制中文
img_pil=Image.fromarray(img)#fro-array:转换数组的格式,返回一个pil图像对象
draw=ImageDraw.Draw(img_pil)#在纸上画的对象
font=ImageFont.truetype('msyh.ttc',40)#字体选择,字号
draw.text((15,20),'你好中文',font=font,fill=(255,255,255))#fill表示文本颜色

#转换opencv
img=np.array(img_pil)
cv2.namedWindow('chinese',0)
cv2.imshow('chinese',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行的结果:
在这里插入图片描述
实战在图片上配中文:

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

#导入图片
img=cv2.imread('OpenCV-Python-Tutorial-master\LENA.webp')
img_pil=Image.fromarray(img)
img_draw=ImageDraw.Draw(img_pil)
font=ImageFont.truetype('msyh.ttc',40)
img_draw.text((0,0),text='莉娜',fill=(255,255,255),font=font)


#展示图片
img=np.array(img_pil)
cv2.imshow('lena',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

四.总结

学什么东西都要知道学什么,不要因为一个库函数不可以用就转去学习cmake等然后逐渐忘记自己最初要学什么(笔者就是这样,为了这个小函数找了三个小时的原因,真的是方脑壳了,呜呜呜)别再一棵树上吊死,愿你我共勉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值