ubuntu18.04 Opencv nparray图像与pillow Image间格式转换(在图片上插入中文)

代码:
# -*- coding: UTF-8 -*-    
import cv2
from PIL import Image
from PIL  import ImageDraw
from PIL  import ImageFont
import numpy

def show_chinese(img,pos):
    img_pil = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    font = ImageFont.truetype(font='/usr/share/fonts/DENG.TTF', size=24)
    #font = ImageFont.load_default()
    draw = ImageDraw.Draw(img_pil)
    draw.text(pos,u"你好",fill=(255, 0, 0), font=font)  
    img_cv = numpy.asarray(img_pil)  
    #img_pil.show()                       
    img = cv2.cvtColor(img_cv, cv2.COLOR_RGB2BGR)      
    return img


def usb_pipeline(device_name="/dev/video0",width=640,height=480,fps=30):
    gst_str = ('v4l2src device={} ! '
            'video/x-raw,'
            'width=(int){},height=(int){},'
            'format=(string)YUY2,framerate=(fraction){}/1 ! '
            'videoconvert ! '
            'video/x-raw,format=BGR ! '
            'appsink').format(device_name,width,height,fps)
    return gst_str
width = 640
height = 480
fps =30
device_name = "/dev/video0"

camera_path = usb_pipeline()
cap = cv2.VideoCapture(camera_path,cv2.CAP_GSTREAMER)
fps = cap.get(cv2.CAP_PROP_FPS)
while(True):
    ret,frame = cap.read()
    print("fps:",fps)
    pos=(0,0)
    frame=show_chinese(frame,pos)
    cv2.imshow('frame',frame)
    if cv2.waitKey(1) == ord('q'):
        break

cap.release()
注意点:
        1.头部需要添加# -*- coding: UTF-8 -*-    

这样编译的时候才能使用UTF-8识别编码,否则会出现识别不了中文部分字符的错误。

        2.使用PIL下的模块对图片进行读取,重写,和字体的获取。需要import其下的模块。

from PIL import Image

from PIL  import ImageDraw

from PIL  import ImageFont

  1. 字体这里,没有用绝对路径但是把字体放在/usr/share/fonts下似乎也能找到,应该是系统的默认路径。
  2. 使用PIL写入中文字体,要注意写入的字符前面要添加u””。在网上看到有些人直接写也可以,但是我这里不行,必须要添加u””才能显示中文,否则乱码。
  3. PIL图片和cv2图片的存储格式不同所以需要互相转换。

PIL是RGB格式,Image.open()返回的是Image对象。

cv2是BGR格式,cv2.imread返回的是numpy.nparray对象。

因此在转换时需要使用cv2.COLOR_RBG2BGR和cv2.COLOR_BGR2RGB转换。(总的是cv2.cvtColor(img,cv2.COLOR_BGR2RGB/RGB2BGR))

cv2转换为PIL用Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))

PIL转换为cv2用numpy.asarray(cv2.cvtColor(img,cv2.COLOR_RGB2BGR))

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值