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安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
02-OpenCV图像与视频文件处理git与github使用学习总结(基础篇)
  • Giscus
  • Cusdis
  • Utterance
Naipings
Naipings
一个普通的大学生,分享自己学习的“有趣”知识
Announcement
type
status
date
slug
summary
tags
category
icon
password
🎉 感谢您的支持 🎉
-- 点击收藏不迷路 ---
👏欢迎更新体验👏