> 文档中心 > OpenCV学习笔记4-通过OpenCV绘制图形和填充多边形(附代码实现)

OpenCV学习笔记4-通过OpenCV绘制图形和填充多边形(附代码实现)

文章目录

  • 1 绘制图形
  • 2 填充多边形
    • 2.1 填充多边形
    • 2.2 填充凸多边形

1 绘制图形

利用OpenCV提供的绘制图形API可以轻松在图像上绘制各种图形, 比如直线, 矩形, 圆, 椭圆等图形.

1.1 画直线

  • 画直线:cv2.line(img, pt1, pt2, color[, thickness[, lineType[, shift]]])
    • img: 在哪个图像上画线
    • pt1, pt2: 开始点, 结束点. 指定线的开始与结束位置
    • color: 颜色
    • thickness: 线宽,为正
    • lineType: 线型.线型为-1, 4, 8, 16, 默认为8
      • 越大越光滑,越小锯齿状越明显
    • shift: 坐标缩放比例.
import cv2import numpy as np# 创建纯黑的背景图用来画图形img = np.zeros((800, 800, 3), np.uint8)# 4的线宽,锯齿明显cv2.line(img, (10, 20), (300, 400), (0, 0, 255), 5, 4)# 16的线宽,光滑cv2.line(img, (80, 100), (380, 480), (0, 0, 255), 5, 16)cv2.imshow('draw', img)cv2.waitKey(0)cv2.destroyAllWindows()

1.2 画矩形

  • 画矩形:cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]])
    • img: 在哪个图像上矩形
    • pt1, pt2: 开始点, 结束点. 指定线的开始与结束位置
    • color: 颜色
    • thickness: 线宽
      • 为正画的是空心矩形
      • 为负画的是实心矩形
    • lineType: 线型.线型为-1, 4, 8, 16, 默认为8
      • 越大越光滑,越小锯齿状越明显
    • shift: 坐标缩放比例.
import cv2import numpy as np# 创建纯黑的背景图用来画图形img = np.zeros((800, 800, 3), np.uint8)# 为正,空心矩形cv2.rectangle(img, (80, 100), (380, 380), (0, 255, 0), 5)# 为负,实心矩形cv2.rectangle(img, (80, 100), (380, 380), (0, 255, 0), -1)cv2.imshow('draw', img)cv2.waitKey(0)cv2.destroyAllWindows()

1.3 画圆

  • 画圆:cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]])
    • img 在哪个图像上圆
    • center 圆心位置
    • radius 圆的半径
    • color 圆的颜色
    • thickness 圆形轮廓的粗细
      • 为正画的是空心圆
      • 为负画的是实心圆
    • lineType 圆边界类型
    • shift 坐标缩放比例.
import cv2import numpy as npimg = np.zeros((800, 800, 3), np.uint8)# 为正,空心圆cv2.circle(img, (320, 240), 100, (0, 0, 255), 5, 16)# 为负,实心圆# cv2.circle(img, (320, 240), 100, (0, 0, 255), -1, 16)cv2.imshow('draw', img)cv2.waitKey(0)cv2.destroyAllWindows()

1.4 画椭圆

  • 画椭圆:cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]])

    • img 在哪个图像上画椭圆

    • center 椭圆的中心点

    • axes 长宽的一半

    • angle 角度

    • startAngle 从哪个角度开始

    • endAngle 从哪个角度结束

    • color 椭圆的颜色

    • thickness 椭圆形轮廓的粗细

      • 为正画的是空心椭圆
      • 为负画的是实心椭圆
    • lineType 椭圆边界类型

    • shift 坐标缩放比例.

import cv2import numpy as np# 创建纯黑的背景图用来画图形img = np.zeros((800, 800, 3), np.uint8)# 画完整椭圆,空心# cv2.ellipse(img, (320, 240), (100, 50), 0, 0, 360, [0, 0, 255], 5, 16)# 画1/4椭圆,空心# cv2.ellipse(img, (320, 240), (100, 50), 0, 0, 90, [0, 0, 255], 5, 16)# 顺时针旋转45度,空心# cv2.ellipse(img, (320, 240), (100, 50), 45, 0, 360, [0, 0, 255], 5, 16)# 实心椭圆cv2.ellipse(img, (320, 240), (100, 50), 0, 0, 360, [0, 0, 255], -1, 16)cv2.imshow('draw', img)cv2.waitKey(0)cv2.destroyAllWindows()

1.5 画多边形

  • 画多边形:cv2.polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]])

    • img 哪个图像上画多边形
    • pts 多边形的点集,必须是int32位,而且是三维
    • isClosed 形成的多边形是否闭合
    • color 多边形的颜色
    • thickness 多边形轮廓的粗细,线宽无法用负数填充,可以使用cv2.fillPoly( )填充
    • lineType 多边形边界类型
    • shift 坐标缩放比例.
    import cv2import numpy as np# 创建纯黑的背景图用来画图形img = np.zeros((800, 800, 3), np.uint8)# 绘制多边形# pts多边形的点集, 必须是int32位pts = np.array([(250, 100), (150, 300), (50, 280)], np.int32)# 注意pts是3维的. # 不闭合多边形# cv2.polylines(img, [pts], False, (0, 0, 255), 5)# 闭合多边形# cv2.polylines(img, [pts], True, (0, 0, 255), 5)cv2.imshow('draw', img)cv2.waitKey(0)cv2.destroyAllWindows()

2 填充多边形

2.1 填充多边形

  • 填充多边形:cv2.fillPoly(img, pts, color[, lineType[, shift[, offset]]])
    • img 在哪个图像上填充
    • pts 多边形的点集,必须是int32位,而且是三维
    • color 填充颜色
    • lineType 边界类型
    • shift 坐标缩放比例.
    • offset 轮廓线上所有点的可选偏移量

填充一个:

import cv2import numpy as np# 创建纯黑的背景图用来画图形img = np.zeros((800, 800, 3), np.uint8)# 绘制多边形# pts多边形的点集, 必须是int32位pts = np.array([(250, 100), (150, 300), (50, 280)], np.int32)# 注意pts是3维的. # 不闭合多边形# cv2.polylines(img, [pts], False, (0, 0, 255), 5)# 闭合多边形cv2.polylines(img, [pts], True, (0, 0, 255), 5)# 填充多边形cv2.fillPoly(img, [pts], (0, 0, 255))cv2.imshow('draw', img)cv2.waitKey(0)cv2.destroyAllWindows()

填充多个:

import cv2import numpy as npimg = np.zeros((800, 800, 3), np.uint8)area1 = np.array([[100,100],[150,100],[200,300],[50,300]])area2 = np.array([[500,100],[700,100],[700,300],[500,300]])cv2.fillPoly(img, [area1, area2], (255, 255, 255))cv2.imshow('draw', img)cv2.waitKey(0)cv2.destroyAllWindows()

2.2 填充凸多边形

填充凸多边形:

  • cv2.fillConvexPloy(img, points, color[, lineType[, shift]])
    • img 输入图像
    • points 凸多边形的点集,二维
    • color 填充颜色
    • lineType 边界类型
    • shift 坐标缩放比例.
import cv2import numpy as npimg = np.zeros((800, 800, 3), np.uint8)points = np.array([[400,100], [50,600], [200,600]])cv2.fillConvexPoly(img, points, (255, 255, 255))cv2.imshow('draw', img)cv2.waitKey(0)cv2.destroyAllWindows()

附OpenCV目录:OpenCV总目录学习笔记

智科专业小白,写博文不容易,如果喜欢的话可以点个赞哦!OpenCV学习笔记4-通过OpenCV绘制图形和填充多边形(附代码实现)