济南网站建设与优化,淮北哪些企业做网站,厦门网站建设商家,接广告推广的平台OpenCV 提供了方便的绘图功能#xff0c;使用其中的绘图函数可以绘制直线、矩形、圆、椭圆等多种几何图形#xff0c;还能在图像中的指定位置添加文字说明。 OpenCV 提供了绘制直线的函数 cv2.line()、绘制矩形的函数 cv2.rectangle()、绘制圆的函数cv2.circle()、绘制椭圆的… OpenCV 提供了方便的绘图功能使用其中的绘图函数可以绘制直线、矩形、圆、椭圆等多种几何图形还能在图像中的指定位置添加文字说明。 OpenCV 提供了绘制直线的函数 cv2.line()、绘制矩形的函数 cv2.rectangle()、绘制圆的函数cv2.circle()、绘制椭圆的函数cv2.ellipse()、绘制多边形的函数 cv2.polylines()、在图像内添加文字的函数 cv2.putText()等多种绘图函数。
这些绘图函数有一些共有的参数主要用于设置源图像、颜色、线条属性等。下面对这些共有参数做简单的介绍。
img在其上面绘制图形的载体图像绘图的容器载体也称为画布、画板。color绘制形状的颜色。通常使用 BGR 模型表示颜色例如(0, 255, 0)表示绿色。对于灰度图像只能传入灰度值。需要注意颜色通道的顺序是 BGR而不是 RGB。thickness线条的粗细。默认值是 1如果设置为-1表示填充图形即绘制的图形是实心的。lineType线条的类型默认是 8 连接类型。lineType 参数的值及说明如表 19-1 所示。 shift数据精度。该参数用来控制数值例如圆心坐标等的精度一般情况下不需要设置。
绘制直线
OpenCV 提供了函数 cv2.line()用来绘制直线线段。该函数的语法格式为 img cv2.line( img, pt1, pt2, color[, thickness[, lineType ]]) 式中
参数 img、color、thickness、lineType 的含义如前面的说明所示。pt1 表示线段的第 1 个点起点。pt2 表示线段的第 2 个点终点。
示例使用 cv2.line()函数在一个黑色背景图像内绘制三条线段。
import numpy as np
import cv2
n 300 # 图像尺寸# 创建一个空白的彩色图像尺寸为(n1) x (n1)3通道RGB
img np.zeros((n1, n1, 3), np.uint8)# 在图像上绘制蓝色直线起点为(0,0)终点为(n,n)线宽为3
img cv2.line(img, (0, 0), (n, n), (255, 0, 0), 3)# 在图像上绘制绿色直线起点为(0,100)终点为(n,100)线宽为1
img cv2.line(img, (0, 100), (n, 100), (0, 255, 0), 1)# 在图像上绘制红色直线起点为(100,0)终点为(100,n)线宽为6
img cv2.line(img, (100, 0), (100, n), (0, 0, 255), 6)winname line-demo # 窗口名称# 创建一个窗口并设置窗口名字
cv2.namedWindow(winname)# 在窗口中显示图像
cv2.imshow(winname, img)# 等待键盘按键0表示无限等待
cv2.waitKey(0)
cv2.destroyAllWindows()运行结果 绘制矩形
OpenCV 提供了函数 cv2.rectangle()用来绘制矩形。该函数的语法格式为 img cv2.rectangle( img, pt1, pt2, color[, thickness[, lineType]] ) 式中
参数 img、color、thickness、lineType 的含义如前面的说明所示。pt1 为矩形顶点。pt2 为矩形中与 pt1 对角的顶点。
使用函数 cv2.rectangle()在一个白色背景图像内绘制一个实心矩形和空心矩形。
代码如下
import numpy as np
import cv2n 300 # 图像尺寸# 创建一个白色背景的彩色图像尺寸为n x n3通道RGB
img np.ones((n, n, 3), np.uint8) * 255# 在图像上绘制填充的红色矩形左上角坐标为(50, 50)右下角坐标为(n-100, n-50)颜色为红色厚度为-1表示填充, 0表示不填充
img cv2.rectangle(img, (50, 50), (n-100, n-50), (0, 0, 255), -1)winname rect-shixin # 窗口名称# 创建一个窗口并设置窗口名字
cv2.namedWindow(winname)# 在窗口中显示图像
cv2.imshow(winname, img)# 等待键盘按键0表示无限等待
cv2.waitKey(0)# 关闭所有打开的窗口
cv2.destroyAllWindows()将img cv2.rectangle(img, (50, 50), (n-100, n-50), (0, 0, 255), -1)
其中的 -1 改成0就可以画一个非实心的矩形框效果如下。 绘制圆形
OpenCV 提供了函数 cv2.circle()用来绘制圆。该函数的语法格式为
img cv2.circle( img, center, radius, color[, thickness[, lineType]] )式中 参数 img、color、thickness、lineType 的含义如前面的说明所示。 center 为圆心。 radius 为半径
使用函数 cv2.circle()在一个白色背景图像内绘制一组同心圆。
代码如下
import numpy as np
import cv2
d 400
img np.ones((d,d,3),dtypeuint8)*255
(centerX,centerY) (round(img.shape[1] / 2),round(img.shape[0] / 2))
# 将图像的中心作为圆心,实际值为 d/2
red (0,0,255) # 设置白色变量
for r in range(5,round(d/2),12):cv2.circle(img,(centerX,centerY),r,red,3)# circle(载体图像圆心半径颜色)
cv2.imshow(Demo19.3,img)
cv2.waitKey(0)
cv2.destroyAllWindows()运行效果 绘制椭圆
OpenCV 提供了函数 cv2.ellipse()用来绘制椭圆。该函数的语法格式为 imgcv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType]]) 式中
参数 img、color、thickness、lineType 的含义如前面的说明所示。center 为椭圆的圆心坐标。axes 为轴的长度。angle 为偏转的角度。startAngle 为圆弧起始角的角度。endAngle 为圆弧终结角的角度。
使用函数 cv2.ellipse()在一个白色背景图像内随机绘制一组空心椭圆。
import numpy as np
import cv2
d 400
img np.ones((d,d,3),dtypeuint8)*255
# 生成白色背景
center(round(d/2),round(d/2))
# 注意数值类型不可以使用语句 center(d/2,d/2)
size(100,200)
# 轴的长度
for i in range(0,10):angle np.random.randint(0,361)# 偏移角度color np.random.randint(0,high 256,size (3,)).tolist()# 生成随机颜色3 个[0,256)的随机数thickness np.random.randint(1,9)cv2.ellipse(img, center, size, angle, 0, 360, color,thickness)
cv2.imshow(demo-tuoyuan,img)
cv2.waitKey(0)
cv2.destroyAllWindows()运行效果
绘制多边形
OpenCV 提供了函数 cv2.polylines()用来绘制多边形。该函数的语法格式为 img cv2.polylines( img, pts, isClosed, color[, thickness[, lineType[, shift]]]) 式中
参数 img、color、thickness、lineType 和 shift 的含义如前面的说明所示。pts 为多边形的各个顶点。isClosed 为闭合标记用来指示多边形是否是封闭的。若该值为 True则将最后一个点与第一个点连接让多边形闭合否则仅仅将各个点依次连接起来构成一条曲线。
在使用函数 cv2.polylines()绘制多边形时需要给出每个顶点的坐标。这些点的坐标构建了一个大小等于“顶点个数12”的数组这个数组的数据类型必须为 numpy.int32。
使用函数 cv2.polylines()在一个白色背景图像内绘制一个多边形。
import numpy as np
import cv2
d 400 # 图像尺寸# 创建一个白色背景的彩色图像尺寸为d x d3通道RGB
img np.ones((d, d, 3), dtypeuint8) * 255# 生成多边形的各个顶点坐标
pts np.array([[200, 50], [300, 200], [200, 350], [100, 200]], np.int32)# 重新整形顶点数组将其变为顶点数 x 1 x 2 的形状
pts pts.reshape((-1, 1, 2))# 使用 cv2.polylines() 函数绘制多边形
# 第一个参数为图像第二个参数为顶点数组第三个参数为True表示封闭多边形颜色为绿色线宽为8
cv2.polylines(img, [pts], True, (0, 255, 0), 8)
cv2.imshow(duobianxing,img)
cv2.waitKey(0)
cv2.destroyAllWindows() 函数 cv2.polylines()中的第 3 个参数 isClosed 是闭合标记将该值设置为 False 时仅仅将 各个顶点用线段连接多边形是不封闭的。此时的代码为
cv2.polylines(img,[pts],False,(0,255,0),8)效果如下 在图形上绘制文字
OpenCV 提供了函数 cv2.putText()用来在图形上绘制文字。该函数的语法格式为 imgcv2.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]]) 式中
参数 img、color、thickness、lineType 和 shift 的含义如前面的说明所示。text 为要绘制的字体。org 为绘制字体的位置以文字的左下角为起点。fontFace 表示字体类型其参数类型及含义如表 19-2 所示。fontScale 表示字体大小。bottomLeftOrigin 用于控制文字的方向。默认值为 False当设置为 True 时文字是垂直镜像的效果。 使用函数 cv2.putText()在一个白色背景图像内绘制文字。
代码如下
import numpy as np
import cv2d 400 # 图像尺寸# 创建一个白色背景的彩色图像尺寸为d x d3通道RGB
img np.ones((d, d, 3), dtypeuint8) * 255# 定义字体
font cv2.FONT_HERSHEY_SIMPLEX# 在图像上绘制红色的 OpenCV 文本位置同样为(0, 200)字体大小为3线宽为5
cv2.putText(img, OpenCV, (0, 200), font, 3, (0, 0, 255), 5)# 创建一个窗口并显示图像
cv2.imshow(weizi, img)cv2.waitKey(0)
cv2.destroyAllWindows()
该段程序在图像 img 中使用函数 cv2.putText()绘制了文字 “OpenCV”。