前军教程网

中小站长与DIV+CSS网页布局开发技术人员的首选CSS学习平台

OpenCV-Python教程(四):绘制多边形、输出文字

1、多边形

cv2.polylines()用来画多边形。

  • 第1个参数为图像对象;
  • 第2个参数为包含一个三元组元素的列表,包含了多边形的各个顶点;
  • 第3个参数为Bool型参数表示是否闭合;
  • 第4个参数为颜色;
  • 第5个参数为线条宽度,注意不能使用-1表示填充;

方形可以看做是一种特殊的多边形,知道其4个顶点的坐标也可以利用polylines()画出方形。下面这个例子利用polylines()画出一个方形和五角星:

import cv2
import numpy as np

img = np.ones((512,512,3)) #白色背景
color=(0,255,0)  #绿色
#五角星
pts = np.array([[70,190],[222,190],[280,61],[330,190],[467,190],
     [358,260],[392,380],[280,308],[138,380],[195,260]])
pts = pts.reshape((-1,1,2))  #reshape为10x1x2的numpy
print(pts.shape)     # (10, 1, 2)
cv2.polylines(img,[pts],True,color,5)
#方形
pts = np.array([[10,50],[100,50],[100,100],[10,100]])
pts = pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,color,3)

cv2.imshow('juzicode.com',img)
cv2.waitKey()

运行结果:

2、输出文字

cv2.putText()用来输出文字。

  • 第1个参数为图像对象;
  • 第2个参数为要输出的字符串;
  • 第3个参数为起始点位置;
  • 第4个参数为字体;
  • 第5个参数为字体大小;
  • 第6个参数为颜色;
  • 第7个参数为线条宽度,默认为1;
  • 第8个参数为线型,默认为LINE8;
import cv2
import numpy as np

img = np.ones((512,512,3)) #白色背景

text = 'AAAAA'
start = (10,200) 
font = cv2.FONT_HERSHEY_SIMPLEX
fontscale = 2
color=(0,0,255)  #红色
thick = 2
linetype = cv2.LINE_AA
cv2.putText(img,text,start, font, fontscale, color,thick,linetype)
 
cv2.imshow('juzicode.com',img)
cv2.waitKey()

上面的例子是输出英文,我们试下包含中文的情况,将text内容修改为“桔子”,输出就会乱码。通过dir()命令可以将所有FONT开头的内容打印出来,OpenCV中并没有包含中文字体:

>>> cv2.__version__
'4.5.2'
>>>
>>> [i for i in dir(cv2) if i.startswith('FONT')]
['FONT_HERSHEY_COMPLEX', 'FONT_HERSHEY_COMPLEX_SMALL', 'FONT_HERSHEY_DUPLEX', 'FONT_HERSHEY_PLAIN', 'FONT_HERSHEY_SCRIPT_COMPLEX', 'FONT_HERSHEY_SCRIPT_SIMPLEX', 'FONT_HERSHEY_SIMPLEX', 'FONT_HERSHEY_TRIPLEX', 'FONT_ITALIC']
>>>

一个变通的方法是通过pillow转换后显示中文:

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

img = np.full((512,512,3),255,np.uint8) #白色背景
img_pil = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))

text = '桔子'
start = (10,200)      #起始位置
fonttype = 'msyh.ttc' #微软雅黑字体,和具体操作系统相关
fontscale = 30        #字体大小
font = ImageFont.truetype(fonttype,fontscale)
draw = ImageDraw.Draw(img_pil)
draw.text(start,text,font=font,fill=(255,0,0))  #PIL中BGR=(255,0,0)表示红色
img_ocv = np.array(img_pil)                     #PIL图片转换为numpy
img = cv2.cvtColor(img_ocv,cv2.COLOR_RGB2BGR)   #PIL格式转换为OpenCV的BGR格式
cv2.imshow('juzicode.com',img)
cv2.waitKey()

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言