OpenCV(绘图功能笔记)

目标

学习使用OpenCV绘制不同的几何形状

cv.line(),cv.circle(),cv.rectangle(),cv.ellipse(),cv.putText()等。

画线(cv.line)

要绘制一条线,需要传递线的开始和结束坐标。我们将创建一个黑色图像,并从左上角到右下角在其上绘制一条蓝线。

import numpy as np
import cv2 as cv

# 创建黑色的图像,大小为512x512像素,3个颜色通道(RGB)
img = np.zeros((512, 512, 3), np.uint8)


while 1:  # 创建一个无限循环,直到用户按下空格键
    # 颜色为白色,线条厚度为50
    cv.line(img, (0, 250), (511, 250), (255, 255, 255), 50)

    # 显示图像
    cv.imshow('line', img)

    # 如果用户按下空格键,则退出循环
    if cv.waitKey(0) == ord(' '):
        break

    # 销毁所有OpenCV创建的窗口
cv.destroyAllWindows()

画矩形(cv.rectangle)

cv.rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)

参数说明:

img:要绘制矩形的图像。

pt1:矩形的一个角的坐标(通常是左上角)。

pt2:矩形对角线上的另一个角的坐标(通常是右下角)。

color:矩形的颜色,以BGR格式指定(即蓝色、绿色、红色的强度)。

thickness:线条的厚度。如果设置为-1(或cv.FILLED),则矩形会被填充。

lineType:线条的类型,例如cv.LINE_8、cv.LINE_AA等。如果未指定,则使用默认值。

shift:坐标点和线条粗细的小数位数。

画圆圈(cv.circle)

cv2.circle(img, center, radius, color, thickness=None, lineType=None, shift=None)

参数说明:

img: 这是你想要在其上绘制圆形的图像。它应该是一个NumPy数组,通常是通过读取图像文件或创建空图像得到的。

center: 圆形的中心坐标,是一个包含两个元素的元组或列表,分别表示x和y坐标((x, y))。

radius: 圆形的半径,以像素为单位。

color: 圆形的颜色,是一个包含三个元素的元组或列表,分别表示BGR(蓝色、绿色、红色)的强度。每个颜色的值范围从0到255。

画椭圆(cv.ellipse)

cv.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]])

参数说明:

img: 输入输出图像。这个图像可以是单通道灰度图像或多通道彩色图像。

center: 椭圆的中心点坐标,类型为 Point。

axes: 椭圆的长半轴和短半轴的长度,类型为 Size。注意这里的长度是以像素为单位的。

angle: 椭圆绕其中心旋转的角度,以度为单位。正值表示逆时针旋转。

startAngle 和 endAngle: 椭圆弧的起始和终止角度,以度为单位。这两个参数用于绘制椭圆的一部分,而不是整个椭圆。

color: 线条的颜色,用三通道表示(BGR格式)。

thickness: 线条的粗细,默认值为1。如果设置为-1,则表示椭圆将被填充。

lineType: 线条的类型,默认值为 LINE_8。这个参数控制线条的绘制方式,例如是否为抗锯齿等。

shift: 坐标值的小数位数。这个参数通常用于内部计算,以提高精度。用户一般不需要修改它。

画多边形

要绘制多边形,首先需要顶点的坐标。将这些点组成形状为ROWSx1x2的数组,其中ROWS是顶点数,并且其类型应为int32。在这里,我们绘制了一个带有四个顶点的黄色小多边形。

import numpy as np
import cv2 as cv

# 创建黑色的图像,大小为512x512像素,3个颜色通道(RGB)
img = np.zeros((512, 512, 3), np.uint8)


while 1:  # 创建一个无限循环,直到用户按下空格键
    # 颜色为白色,线条厚度为50
    # 创建一个NumPy数组,包含四个二维点,这些点将构成多边形的顶点
    # 数组的形状是(4, 2),其中4表示有四个点,2表示每个点有两个坐标(x, y)
    pts = np.array([[5, 15], [10, 30], [5, 40], [1, 20]], np.int32)

    # 使用reshape函数重新调整数组的形状。这里reshape的参数是(-1, 1, 2)
    # -1表示该维度的大小是自动计算的,以使得总的元素数量保持不变
    # 1表示中间增加了一个维度,现在数组的形状变成了(4, 1, 2)
    # 这意味着现在数组被视为包含4个元素,每个元素是一个1x2的数组(即一个点的坐标)
    # 这样做是因为cv.polylines函数要求点的数组是Nx1x2形状的,其中N是多边形的顶点数
    pts = pts.reshape((-1, 1, 2))

    # 使用cv.polylines函数在图像上绘制多边形
    # img是待绘制的图像
    # [pts]是将pts数组放在一个列表中,因为cv.polylines函数的第二个参数要求是一个列表的列表(即多边形的列表)
    # 这里的列表只包含一个多边形
    # True表示多边形是闭合的,即第一个点和最后一个点会自动连接
    # (0, 255, 255)是多边形的颜色,这里是青色(在BGR颜色空间中)
    cv.polylines(img, [pts], True, (0, 255, 255))

    # 显示图像
    cv.imshow('line', img)

    # 如果用户按下空格键,则退出循环
    if cv.waitKey(0) == ord(' '):
        break

    # 销毁所有OpenCV创建的窗口
cv.destroyAllWindows()

如果第三个参数为False,您将获得一条连接所有点的折线,而不是闭合形状。 cv.polylines()可用于绘制多条线。只需创建要绘制的所有线条的列表,然后将其传递给函数即可。所有线条将单独绘制。与为每条线调用cv.line相比,绘制一组线是一种更好,更快的方法。

向图像添加文本:

# 设置字体样式为 Hershey Simplex,这是一种简单的字体  
font = cv.FONT_HERSHEY_SIMPLEX  
  
# 在图像上绘制文本  
# 参数说明:  
# img: 要绘制文本的图像  
# 'OpenCV': 要绘制的文本字符串  
# (10,500): 文本左下角的坐标(x, y)  
# font: 字体类型  
# 4: 字体大小(缩放因子)  
# (255,255,255): 文本颜色(BGR格式)  
# 2: 文本的线条粗细  
# cv.LINE_AA: 抗锯齿线条类型,用于使文本边缘更平滑  
cv.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv.LINE_AA)
相关推荐
王哈哈^_^21 分钟前
【数据集】【YOLO】【VOC】目标检测数据集,查找数据集,yolo目标检测算法详细实战训练步骤!
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·pyqt
一者仁心27 分钟前
【AI技术】PaddleSpeech
人工智能
是瑶瑶子啦35 分钟前
【深度学习】论文笔记:空间变换网络(Spatial Transformer Networks)
论文阅读·人工智能·深度学习·视觉检测·空间变换
EasyCVR39 分钟前
萤石设备视频接入平台EasyCVR多品牌摄像机视频平台海康ehome平台(ISUP)接入EasyCVR不在线如何排查?
运维·服务器·网络·人工智能·ffmpeg·音视频
柳鲲鹏1 小时前
OpenCV视频防抖源码及编译脚本
人工智能·opencv·计算机视觉
西柚小萌新1 小时前
8.机器学习--决策树
人工智能·决策树·机器学习
向阳12181 小时前
Bert快速入门
人工智能·python·自然语言处理·bert
jndingxin1 小时前
OpenCV视觉分析之目标跟踪(8)目标跟踪函数CamShift()使用
人工智能·opencv·目标跟踪
杰说新技术1 小时前
Meta AI最新推出的长视频语言理解多模态模型LongVU分享
人工智能·aigc
说私域1 小时前
基于开源 AI 智能名片、S2B2C 商城小程序的用户获取成本优化分析
人工智能·小程序