type
status
date
slug
summary
tags
category
icon
password
OpenCV作为计算机视觉库,其中一项基本功能就是绘制图形;OpenCV提供了绘制直线、圆、矩形、椭圆等的函数。在构建计算机视觉项目时,通常希望通过绘制一些图形来显式的标注图像。例如,在人脸检测算法中,会通过绘制一个矩形,突出显示计算图像中检测到的人脸。此外,如果开发人脸识别算法,除了绘制一个矩形突出显示检测到的人脸外,通常还会绘制文本标识检测到的人脸的身份。最后,项目可能还会需要输出一些调试信息,例如,可以显示检测到的人脸数量或处理时间(用于查看算法的性能)。本节内容即:如何使用OpenCV库绘制图形和文本。
📝 主旨内容
相关函数:
1.绘制直线:cv2.line()
img = cv2.line(img, pt1, pt2, color, thickness=1, lineType=8, shift=0)
此函数在img图像上画一条连接pt1和pt2的直线。
2.绘制矩形:cv2.rectangle()
img = cv2.rectangle(img, pt1, pt2, color, thickness=1, lineType=8, shift=0)
此函数根据矩形左上角点pt1和右下角点pt2绘制矩形。
3.绘制圆形:cv2.circle()
img = cv2.circle(img, center, radius, color, thickness=1, lineType=8, shift=0)
此函数以点center为中心绘制一个半径为radius的圆。
4.绘制剪裁线:cv2.clipLine()
retval, pt1_new, pt2_new = cv2.clipLine(imgRect, pt1, pt2)
cv2.circle()函数返回矩形内的线段(由输出点pt1_new和pt2_new定义),该函数根据定义的矩形imgRect裁剪线段。
如果两个原始点pt1和pt2都在矩形之外,则retval为False;否则返回True。
5.绘制箭头:cv2.arrowedLine()
cv2.arrowedLine(img, pt1, pt2, color, thickness=1, lineType=8, shift=0, tipLength=0.1)
此函数用于绘制箭头,箭头从pt1定义的点指向pt2定义的点。
箭头尖端的长度可以由tipLength()参数控制,该参数是根据线段长度(pt1和pt2之间的距离)的百分比定义的,eg:
# 箭头尖端的长度为线段长度的 10%
cv2.arrowedLine(image, (50, 50), (450, 50), colors['cyan'], 3, 8, 0, 0.1)
# 箭头尖端的长度为线段长度的 30%
cv2.arrowedLine(image, (50, 200), (450, 200), colors['magenta'], 3, cv2.LINE_AA, 0, 0.3)
# 箭头尖端的长度为线段长度的 30%
cv2.arrowedLine(image, (50, 400), (450, 400), colors['blue'], 3, 8, 0, 0.3)
以上代码定义了三个箭头,除了箭头的大小不同外,使用了不同的lineType参数cv2.LINE_AA(也可以写16)和8(也可以写cv2.LINE_8),
6.绘制椭圆:cv2.ellipse()
cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness=1, lineType=8, shift=0)
此函数用于绘制不同类型的椭圆:
angle参数(以度为单位)可以旋转椭圆;axes参数控制长短轴的大小;startAngle和endAngle参数用于设置所需的椭圆弧(以度为单位),
例如,需要完整闭合的椭圆,则startAngle=0、endAngle=360。
7.绘制多边形:cv2.polylines()
cv2.polylines(img, pts, isClosed, color, thickness=1, lineType=8, shift=0)
此函数用于绘制多边形。其中:关键参数是pts,用于提供定义多边形的数组,这个参数的形状是(number_vertex, 1, 2),可以通过使用np.array创建坐标(np.int32类型)来定义它,然后对其进行整形以适应pts参数所需形状。另一个重要的参数isClosed,如果此参数为True,则多边形将被绘制为闭合的;否则,第一个顶点和最后一个顶点之间的线段将不会被绘制,从而产生开放的多边形。
8.绘制文本:cv2.putText()
img = cv.putText(img, text, org, fontFace, fontScale, color, thickness=1, lineType= 8, bottomLeftOrigin=False)
此函数使用fontFace声明字体类型和fontScale因子从org坐标(如果bottomLeftOrigin=False则为左上角,否则为左下角)开始绘制提供的文本字符串text。最后提供的参数lineType同样可以使用三个不同的可选值:cv2.LINE_4、cv2.LINE_8、cv2.LINE_AA。
9.其他与文本相关的函数:
第一个:cv2.getFontScaleFromHeight()
此函数返回字体比例(这是在cv2.putText()函数中使用的参数fontScale),以得到提供的高度(以像素为单位)并考虑字体类型(fontFace)和thickness
retval = cv2.getFontScaleFromHeight(fontFace, pixelHeight, thickness=1)
第二个:cv2.getTextSize()
此函数根据以下参数:要绘制的text、字体类型(fontFace)、fontScale和thickness,获取文本大小(宽度和高度)。此函数返回size和baseLine(它对应于相当于文本底部的基线的y坐标)。
retval, baseLine = cv2.getTextSize(text, fontFace, fontScale, thickness)
1.演示colors常量和show_with_matplotlib()函数的使用:
2.使用OpenCV绘制一些基本图形,以及一些进阶图形
2.1 直线
2.2 矩形
2.3 圆形
2.4 剪裁线
2.5 箭头
2.6 椭圆
2.7 多边形
2.8 绘制函数中的shift参数
2.9 绘制函数中的lineType参数
3.文本
3.1 绘制文本
3.2 OpenCV文本字体
3.3 其他与文本相关的函数
🤗 总结归纳
本文介绍了OpenCV提供的与绘制图形和文本相关的函数。在图形方面,我们了解了如何绘制基本图形(直线、矩形和圆形等)以及高级图形(剪裁线、箭头、椭圆和多边形)。在文本方面,我们了解了如何绘制文本以及 OpenCV 库中的所有可用字体。
📎 参考文章
- 一些引用
- 引用文章
有关OpenCV安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
- Author:Naipings
- URL:https://naipings.cn/article/opencv03
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts