绘图
- 本节主要介绍如何使用 OpenCV 中的绘图功能。
一. 学习目标
- 学会使用 OpenCV 绘制不同的几何形状
- 学习函数 cv.line(), cv.circle(), cv.rectangle(), cv.ellipse(), cv.putText()
二. 参数
- 在上述的函数中,你将看到一些常见的参数,如下所示:
- img :要绘图的图片
- color :要添加形状的颜色。对于 BGR 图像而言,以元组的方式传递,如蓝色 (255, 0, 0) 。对于灰度图像而言,仅仅传递灰度值就可以了。
- thickness :线或圆等形状的粗细。如果对于封闭的图像(如圆),其 thickness 值为 -1 ,表示填充形状。默认值之为 -1 。
- lineType:线的类型,是否为 8-connected, anti-aliased 线等等。默认为 8-connected。
三. 画直线
- 要绘制一条直线,我们需要确定直线的开始坐标以及结束坐标。
- 下面我们绘制一条从左上角到右下角的蓝线,代码如下:
import cv2 as cv import numpy as np img = np.zeros((512, 512, 3), dtype=np.uint8) # 创建黑色背景图 cv.imshow("img", img) # 显示原图 result = cv.line(img, (0 ,0), (511, 511), (0, 255, 0), 1) # 在背景图上绘制线条 cv.imshow("result", result) # 显示处理结果图 cv.waitKey(0) # 等待按键 cv.destroyAllWindows() # 摧毁窗口
- 运行结果:
四. 绘制矩形
- 要绘制矩形,我们需要确定矩形矩形的左上角和右下角坐标。
- 下面,我们来绘制一个填充的矩形框,代码如下:
import numpy as np import cv2 as cv # 创建一个黑色图框 img = np.zeros((512,512,3), np.uint8) # 绘制一个蓝色的矩形框 cv.rectangle(img, (100, 100), (200, 200), (255, 0, 0), -1) cv.imshow("rectangle", img) # 显示图片 cv.waitKey(0) cv.destroyAllWindows()
- 运行结果:
五. 绘制圆形
- 绘制圆形,我们需要确定圆心点的坐标以及圆的半径
- 下面,我们来绘制一个圆形,代码如下:
import cv2 as cv import numpy as np # 创建一个黑色图框 img = np.zeros((512,512,3), np.uint8) # 绘制一个红色的圆 cv.circle(img, (120, 120), 63, (0,0,255), -1) cv.imshow("circle", img) # 显示图片 cv.waitKey(0) cv.destroyAllWindows()
- 运行结果:
六. 绘制多边形
- 要绘制一个多边形,我们需要确定各个顶点的位置,然后将各个顶点的位置变成 Rows * 1 * 2 的形状, Rows 是顶点的数目,其中数据类型要为 int32
- 下面我们就用具体的代码,来绘制一个多边形
import cv2 as cv import numpy as np # 确定两个背景板,形成对比 img = np.zeros((512,512,3), np.uint8) # 确定 4 个点,四个点按照顺序连接成一个封闭图形 pts = np.array([[50,15],[120,30],[170,50],[30,100]], np.int32) pts = pts.reshape((-1,1,2)) # 改变顶点 shape cv.polylines(img, [pts], True, (0,0,255)) cv.imshow("polygon", img) cv.waitKey(0) cv.destroyAllWindows()
- 运行结果:
七. 添加文本
- 在添加文本的时候,需要指定下列参数:
- 要添加的文本(不支持中文)
- 文本的位置
- 字体类型
- 字体大小
- 字体类型请查看:字体类型
- 下面就用具体的代码,演示如何在图片上添加文本 “OpenCV” :
import cv2 as cv import numpy as np img = np.zeros((512,512,3), np.uint8) font = cv.FONT_HERSHEY_SIMPLEX # 确定字体类型 cv.putText(img, 'OpenCV', (10,400), font, 4, (255,255,255), 2 , cv.LINE_AA) cv.imshow("text", img) # 图片显示 cv.waitKey(0) cv.destroyAllWindows()
- 运行结果:
八. 结语
- 如果其中有不对的地方或是需要改进的地方,请指正。
- 联系方式 email:lwl510ll@163.com 。
- 本文到这就结束了,谢谢大家观看。