opencv 绘图
参数说明
绘制形状的函数有一些共同的参数:
- img:要绘制形状的图片
- color:绘制的颜色
- 彩色图就传入 BGR 的一组值,如蓝色就是 (255,0,0)
- 灰度图,传入一个灰度值就行
- thickness:线宽,默认为 1;对于矩形 / 圆之类的封闭形状而言,传入 - 1 表示填充形状
- lineType:线条类型,三个参数可选 cv2.LINE_4、cv2.LINE_8、cv2.LINE_AA
1. 画线
cv2.line(img, ps, pe, color, thickness, lineType, shift)
ps:直线的起点位置,注意这是一个坐标点,类似 (X,Y) 这样,
pe:直线的终点位置,同上
绘制多条直线
如果需要绘制多条直线,使用 cv2.polylines() 要比 cv2.line() 高效很多,
例如:
# 使用cv2.polylines()画多条直线 line1 = np.array([[100, 20], [300, 20]], np.int32).reshape((-1, 1, 2)) line2 = np.array([[100, 60], [300, 60]], np.int32).reshape((-1, 1, 2)) line3 = np.array([[100, 100], [300, 100]], np.int32).reshape((-1, 1, 2)) cv2.polylines(img, [line1, line2, line3], True, (0, 255, 255))
2. 矩形
cv2.rectangle(img, ps, pe, color, thickness, lineType, shift)
ps:矩形左上角点的坐标,
pe:矩形右下角点的坐标,
shift:坐标点小数点位数
3. 圆
cv2.circle(img, center, radius, color, thickness, lineType, shift)
center:圆心坐标,
radius:圆的半径值,
shift:圆心坐标和半径的小数点位数
5. 多边形
cv2.polylines(img, pts, isClosed, color, thickness, lineType, shift)
pts:多边形各边的坐标点组成的一个列表,是一个 numpy 的数组类型
isClosed:值为 True 或 False,若为 True 则表示一个闭合的多边形,若为 False 则不闭合
要绘制多边形,首先需要顶点的坐标。将这些点组成形状为ROWSx1x2
的数组,其中ROWS
是顶点数,并且其类型应为 int32。在这里,我们绘制了一个带有四个顶点的黄色小多边形。
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32) pts = pts.reshape((-1,1,2)) cv.polylines(img,[pts],True,(0,255,255))
6. 向文本或矩形框添加文字
cv2.putText(img, text, org, fontFace, fontScale, color, thickness, lineType, bottomLeftOrigin)
-
text:文字内容,
-
org:文字在图像中的左下角坐标
-
fontFace:字体类型,可选参数有以下几种
FONT_HERSHEY_SIMPLEX,FONT_HERSHEY_PLAIN,FONT_HERSHEY_DUPLEX,FONT_HERSHEY_COMPLEX, FONT_HERSHEY_TRIPLEX, FONT_HERSHEY_COMPLEX_SMALL, FONT_HERSHEY_SCRIPT_SIMPLEX, orFONT_HERSHEY_SCRIPT_COMPLEX
- fontScale:缩放比例,用该值乘以程序字体默认大小即为字体大小
- bottomLeftOrigin:默认为 true,即表示图像数据原点在左下角;若为 False 则表示图像数据原点在左上角。
import cv2 as cv import numpy as np img=np.zeros([512,512,3],np.uint8) ##创建一副黑色的图片 """画线""" cv.line(img,(0,32),(512,89),(255,0,0),3,cv.LINE_8) """画矩阵""" tangle=cv.rectangle(img, (84, 45), (210, 228), (0, 255, 0), 3,cv.LINE_4) """画圆""" cv.circle(img, (447, 63), 63, (0, 0, 255), -1) """画椭圆""" cv.ellipse(img, (256, 256), (100, 50), 90, 0, 360, (255, 0, 0), 2) """画多边形""" pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32) pts = pts.reshape((-1,1,2)) cv.polylines(img,[pts],True,(0,255,255)) """在图片上加文字""" font = cv.FONT_HERSHEY_SIMPLEX cv.putText(img,'OpenCV',(10,500), font, 2,( 0,255,0),2,cv.LINE_AA) """矩形框上加文字""" cv.putText(tangle,'OpenCV',(84, 40), font, 0.5,( 0,255,0),1,cv.LINE_AA) """使用cv.polylines()画多条直线""" line1 = np.array([[100, 20], [300, 20]], np.int32).reshape((-1, 1, 2)) line2 = np.array([[100, 60], [300, 60]], np.int32).reshape((-1, 1, 2)) line3 = np.array([[100, 100], [300, 100]], np.int32).reshape((-1, 1, 2)) cv.polylines(img, [line1, line2, line3], True, (0, 255, 255)) cv.imshow('img',img) cv.waitKey(0) cv.destroyAllWindows()
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战