本帖最后由 Forgotten 于 2023-2-27 12:35 编辑  
 
OpenCV在画面上显示文字使用的是cv2.putText方法,但是如果显示中文会发现无法正常显示,都是问号,因为opencv的putText只能显示简单的字符,无法显示中文。 
因此这里采用PIL库在图片上叠加显示 文字的方法,传入行空板内置的中文字库文件实现。 
 
代码如下,主要实现部分为drawChinese函数: 
			
			
			- import numpy as np
 - from PIL import ImageFont, ImageDraw, Image
 - import cv2
 - import time
 - 
 - cascade = cv2.CascadeClassifier()
 - cascade.load(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
 - 
 - 
 - #在行空板上显示中文的函数,输入一张图片,返回一张增加了文字的图片
 - def drawChinese(text,x,y,size,r, g, b, a,img):
 -     font = ImageFont.truetype("HYQiHei_50S.ttf", size)
 -     img_pil = Image.fromarray(img)
 -     draw = ImageDraw.Draw(img_pil)
 -     draw.text((x,y), text, font=font, fill=(b, g, r, a))
 -     frame = np.array(img_pil)
 -     return frame
 - 
 - 
 - cap = cv2.VideoCapture(-1) #打开摄像头
 - cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)  #设置摄像头图像宽度
 - cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240) #设置摄像头图像高度
 - cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)     #设置OpenCV内部的图像缓存,可以极大提高图像的实时性。
 - cv2.namedWindow('camera',cv2.WND_PROP_FULLSCREEN)    #窗口全屏
 - cv2.setWindowProperty('camera', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)   #窗口全屏
 - 
 - 
 - while True:
 -     success, frame = cap.read()
 - 
 -     if success:
 -         #在当前帧上显示汉字
 -         frame = drawChinese(text="你好",x=5, y=5,size=40,r=255,g=255,b=0,a=50,img=frame)
 -         cv2.imshow("camera", frame)
 - 
 -     if cv2.waitKey(5) & 0xff== ord('a'):
 -         break
 - 
 - cap.release()
 - cv2.destroyAllWindows()
 
  复制代码
  
效果如图: 
 
![[行空板] opencv如何显示中文?cv2.putText中文乱码如何解决图1](https://mc.dfrobot.com.cn/data/attachment/forum/202302/27/122716sllct4t6m1f4klmk.png)  
 
 |