前言
在计算机视觉任务中,绘制和填充多边形是基本技能,例如用于物体标注或区域分割的可视化。OpenCV 提供了多种方法实现多边形绘制和填充,其中包括 cv.polylines
、cv.fillPoly
和 cv.drawContours
等。本文通过一个示例讲解如何灵活地绘制和填充多边形。
完整代码
import cv2 as cv
import numpy as np
def polyline_draw_demo():
# 创建一个黑色画布
image = np.zeros((512, 512, 3), dtype=np.uint8)
# 定义多边形顶点
pts = np.array([[100, 100], [350, 100], [450, 280], [320, 450], [80, 400]], dtype=np.int32)
# 方法1:使用 cv.polylines 绘制多边形边框
# cv.polylines(image, [pts], isClosed=True, color=(0, 0, 255), thickness=2)
# 方法2:使用 cv.fillPoly 填充多边形
# cv.fillPoly(image, [pts], (255, 0, 255))
# 方法3:使用 cv.drawContours 绘制多边形边框
cv.drawContours(image, [pts], contourIdx=-1, color=(0, 255, 0), thickness=1)
# 方法4:使用 cv.drawContours 填充多边形边框并且填充
cv.drawContours(image, [pts], contourIdx=-1, color=(0, 255, 0), thickness=-1)
# 显示结果
cv.imshow("Polyline", image)
cv.waitKey(0)
cv.destroyAllWindows()
# 调用函数
polyline_draw_demo()
代码详解
方法1:cv.polylines
用于绘制多边形的边框:
cv.polylines(image, [pts], isClosed=True, color=(0, 0, 255), thickness=2)
- 参数说明:
image
: 绘制的目标图像。[pts]
: 多边形顶点列表,必须用方括号包裹。isClosed=True
: 指定是否闭合多边形。color=(0, 0, 255)
: 边框颜色,BGR 格式,这里是红色。thickness=2
: 边框的线宽。
方法2:cv.fillPoly
用于填充多边形区域:
cv.fillPoly(image, [pts], (255, 0, 255))
- 参数说明:
image
: 绘制的目标图像。[pts]
: 多边形顶点列表,必须用方括号包裹。(255, 0, 255)
: 填充颜色,BGR 格式,这里是紫色。
方法3和4:cv.drawContours
用于绘制或填充多边形:
cv.drawContours(image, [pts], contourIdx=-1, color=(0, 255, 0), thickness=1)
cv.drawContours(image, [pts], contourIdx=-1, color=(0, 255, 0), thickness=-1)
- 参数说明:
image
: 绘制的目标图像。[pts]
: 多边形顶点列表,必须用方括号包裹。contourIdx=-1
: 表示绘制所有轮廓,单一轮廓也用 -1。color=(0, 255, 0)
: 绘制颜色,BGR 格式,这里是绿色。thickness=1
: 边框线宽,thickness=-1
表示填充区域。
不同方法的优缺点分析
方法1:cv.polylines
- 优点:
- 语义明确,专用于绘制多边形的边框。
- 提供
isClosed
参数,方便绘制非闭合多边形。
- 缺点:
- 仅能绘制边框,不能直接填充区域。
方法2:cv.fillPoly
- 优点:
- 高效填充多边形区域。
- 简单直接,适合需要填充区域的场景。
- 缺点:
- 无法绘制边框,只能填充。
方法3和4:cv.drawContours
- 优点:
- 功能灵活,既可以绘制边框,也可以填充区域。
- 更适合复杂的形状(如嵌套轮廓、多重区域)。
- 缺点:
- 参数较多,初学者可能不容易理解。
- 如果只需要简单的边框或填充,用它可能显得冗余。
© 版权声明
转载请注明出处,并标明原文链接。
本网站尊重知识产权,如有侵权,请及时联系我们删除。
本站所有原创内容仅用于学习和交流目的,未经作者和本站授权不得进行商业使用或盈利行为。
本网站尊重知识产权,如有侵权,请及时联系我们删除。
本站所有原创内容仅用于学习和交流目的,未经作者和本站授权不得进行商业使用或盈利行为。
THE END
暂无评论内容