[行空板] opencv如何显示中文?cv2.putText中文乱码如何解决

2023-02-273.5万
精华项目
AI 快速预览详细 收起
本文介绍了如何在行空板上使用OpenCV显示中文。由于cv2.putText方法无法正常显示中文,文章提供了通过PIL库和行空板内置中文字库文件的解决方案。主要实现部分是drawChinese函数,该函数可以在图片上叠加显示中文。通过这种方式,用户可以轻松实现在OpenCV图像上显示中文,提升图像处理效果。


OpenCV在画面上显示文字使用的是cv2.putText方法,但是如果显示中文会发现无法正常显示,都是问号,因为opencv的putText只能显示简单的字符,无法显示中文。
因此这里采用PIL库在图片上叠加显示 文字的方法,传入行空板内置的中文字库文件实现。

代码如下,主要实现部分为drawChinese函数:
  1. import numpy as np
  2. from PIL import ImageFont, ImageDraw, Image
  3. import cv2
  4. import time
  5. cascade = cv2.CascadeClassifier()
  6. cascade.load(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
  7. #在行空板上显示中文的函数,输入一张图片,返回一张增加了文字的图片
  8. def drawChinese(text,x,y,size,r, g, b, a,img):
  9.     font = ImageFont.truetype("HYQiHei_50S.ttf", size)
  10.     img_pil = Image.fromarray(img)
  11.     draw = ImageDraw.Draw(img_pil)
  12.     draw.text((x,y), text, font=font, fill=(b, g, r, a))
  13.     frame = np.array(img_pil)
  14.     return frame
  15. cap = cv2.VideoCapture(-1) #打开摄像头
  16. cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)  #设置摄像头图像宽度
  17. cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240) #设置摄像头图像高度
  18. cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)     #设置OpenCV内部的图像缓存,可以极大提高图像的实时性。
  19. cv2.namedWindow('camera',cv2.WND_PROP_FULLSCREEN)    #窗口全屏
  20. cv2.setWindowProperty('camera', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)   #窗口全屏
  21. while True:
  22.     success, frame = cap.read()
  23.     if success:
  24.         #在当前帧上显示汉字
  25.         frame = drawChinese(text="你好",x=5, y=5,size=40,r=255,g=255,b=0,a=50,img=frame)
  26.         cv2.imshow("camera", frame)
  27.     if cv2.waitKey(5) & 0xff== ord('a'):
  28.         break
  29. cap.release()
  30. cv2.destroyAllWindows()
复制代码

效果如图:

[行空板] opencv如何显示中文?cv2.putText中文乱码如何解决图1

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(0)
- 没有更多了 -