OpenCV-Python教程:绘制多边形、输出文字(polylines,putText,解决中文乱码问题)
2021/5/31 22:21:21
本文主要是介绍OpenCV-Python教程:绘制多边形、输出文字(polylines,putText,解决中文乱码问题),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
原文链接:http://www.juzicode.com/archives/5575
返回Opencv-Python教程
在 OpenCV-Python教程:绘制直线、圆形、方形 一文中介绍了怎么绘制直线、圆形、方形,这里介绍下怎么绘制多边形、输出文字。
1、多边形
cv2.polylines()用来画多边形。
- 第1个参数为图像对象;
- 第2个参数为包含一个三元组元素的列表,包含了多边形的各个顶点;
- 第3个参数为Bool型参数表示是否闭合;
- 第4个参数为颜色;
- 第5个参数为线条宽度,注意不能使用-1表示填充;
方形可以看做是一种特殊的多边形,知道其4个顶点的坐标也可以利用polylines()画出方形。下面这个例子利用polylines()画出一个方形和五角星:
import cv2 import numpy as np print('VX公众号: 桔子code / juzicode.com') print('cv2.__version__:',cv2.__version__) 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 print('VX公众号: 桔子code / juzicode.com') print('cv2.__version__:',cv2.__version__) img = np.ones((512,512,3)) #白色背景 text = 'VX:juzicode' 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内容修改为“VX:桔子code”,输出乱码了:
通过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 print('VX公众号: 桔子code / juzicode.com') print('cv2.__version__:',cv2.__version__) img = np.full((512,512,3),255,np.uint8) #白色背景 img_pil = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB)) text = 'VX:桔子code' 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()
运行结果:
小结:本文介绍了怎么在图像中绘制多边形,多边形也可以用来绘制方形、三角形;OpenCV中默认不能输出中文文字,可以用过转换为PIL图片再转换回OpenCV图片的变通方法达到输出中文的目的。
扩展阅读:
- OpenCV-Python教程
- OpenCV-Python教程:绘制直线、圆形、方形
这篇关于OpenCV-Python教程:绘制多边形、输出文字(polylines,putText,解决中文乱码问题)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-27使用python 将ETH账户的资产打散
- 2024-09-26Python编程基础
- 2024-09-2610 种方法写出更好的 Python 代码
- 2024-09-25Python编程基础详解
- 2024-09-25Python编程入门教程
- 2024-09-25从零开始使用Python构建LLaMA 3
- 2024-09-23Python中理解和使用树形结构的简单教程
- 2024-09-23Python 编程基础入门
- 2024-09-18初探Python股票自动化交易:入门指南
- 2024-09-18Python量化入门:轻松掌握量化分析基础与实战