从零开始学cv-17:图像绘制基本图形


前言

随着计算机视觉技术的不断发展,OpenCV作为一款强大的开源图像处理库,受到了越来越多开发者的喜爱。本文将带领读者走进OpenCV的世界,从基础入手,详细介绍如何在图片上进行绘制操作。通过学习本文,您将掌握如何在图片上绘制线条、矩形、圆形等基本图形,以及如何为图片添加文字。让我们一起探索图像处理的艺术,开启创意无限的世界。

一、绘制直线与箭头

在opencv中绘制直线的api为cv2.line(img, pt1, pt2, color, thickness, lineType, shift)
参数说明:

img: 要绘制直线的图像。
pt1: 直线起点坐标,格式为(x1, y1)。
pt2: 直线终点坐标,格式为(x2, y2)。
color: 直线的颜色,使用BGR格式,例如蓝色为(255, 0, 0)。
thickness: 直线的粗细,如果为-1,则绘制填充的矩形。
lineType: 线条的类型,通常使用8连接类型。
shift: 坐标点的小数位数。

绘制箭头的直线api为cv2.arrowedLine(img, pt1, pt2, color, thickness, line_type, shift, tipLength)
参数说明:

img: 输出图像,它应该是用来绘制箭头的图像,可以是灰度图像或彩色图像。
pt1: 箭头起点,格式为 (x1, y1)。
pt2: 箭头终点,格式为 (x2, y2)。
color: 箭头的颜色,使用 BGR 格式,例如蓝色为 (255, 0, 0)。
thickness: 线条的粗细。如果为 -1,则绘制填充的箭头。
line_type: 线条的类型,通常使用 8 连接类型,表示 8 邻接。
shift: 坐标点的小数位数。
tipLength: 箭头尖端长度,表示为箭头总长度的比例(通常在 0 到 1 之间)。默认值为 0.1。

案例:

import cv2
import numpy as np
# 创建一个空白的黑色图像
img = np.zeros((200, 200, 3), dtype=np.uint8)
# 定义箭头的起点和终点
pt0 = (20, 20)
pt1 = (50, 50)
pt2 = (150, 150)
# 绘制直线
cv2.line(img, pt0, pt1, (0, 255, 0), 2)
# 绘制箭头
cv2.arrowedLine(img, pt1, pt2, (255, 0, 0), thickness=2, tipLength=0.1)
# 显示图像
cv2.imshow('Arrowed Line', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果:
在这里插入图片描述

二、绘制矩形

在opencv中实现绘制矩形的api为:cv2.rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)
函数介绍:

img: 要在其上绘制矩形的输入图像。图像应该是一个已经存在的图像矩阵,可以是灰度图像或彩色图像。
pt1: 矩形的一个角的坐标,格式为 (x1, y1)。
pt2: 与 pt1 相对的矩形的另一个角的坐标,格式为 (x2, y2)。
color: 矩形的颜色,使用 BGR 格式,例如红色为 (0, 0, 255)。
thickness: 矩形边框的粗细。如果为 -1,则矩形内部将被填充指定的颜色。
lineType: 线条的类型,用于指定绘制矩形边框的连接类型。通常使用 cv2.LINE_8(8 连接)。
shift: 坐标点的小数位数。这个参数用于绘制亚像素精度的矩形,但在大多数情况下不需要使用。

代码示例:

import cv2
import numpy as np

# 创建一个空白的黑色图像
img = np.zeros((200, 200, 3), dtype=np.uint8)

# 定义矩形的两个对角点
pt1 = (50, 50)
pt2 = (150, 100)

# 绘制矩形
cv2.rectangle(img, pt1, pt2, (0, 255, 0), thickness=2)

# 显示图像
cv2.imshow('Rectangle', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果:
在这里插入图片描述
cv2.rectangle只能绘制垂直矩形,若想要绘制倾斜矩形需要知道矩形的四个点坐标,然后通过cv2.drawContours()绘制矩形轮廓。

三、绘制圆形椭圆形

绘制圆形的api为cv2.circle(img, center, radius, color, thickness=1, lineType=8, shift=0)
参数说明:

img: 这是你要在其上绘制圆的图像。它应该是一个二维或三维的numpy数组。
center: 这是一个元组,表示圆心的坐标 (x, y)。
radius: 这是一个整数,表示圆的半径。
color: 这是一个元组,表示圆的颜色。在 OpenCV 中,颜色是用 BGR 格式表示的,而不是 RGB。例如,蓝色是 (255, 0, 0)。
thickness: 这是一个整数,表示圆的线条粗细。如果设置为 -1,则圆将被填充。如果设置为 0 或省略,则不会绘制圆。
lineType: 这个参数指定了圆边缘的线型。它的默认值是 8,表示 8 连接线型。其他的线型包括 4(4 连接线型)和 CV_AA(抗锯齿线型)。
shift: 这个参数是圆心坐标和半径的小数位数。默认值是 0,表示圆心坐标和半径都是整数。这个参数很少使用。

案例:

import cv2
import numpy as np

# 创建一个空白的黑色图像
img = np.zeros((200, 200, 3), dtype=np.uint8)

# 定义圆的中心点坐标和半径
center_coordinates = (100, 100)
radius = 50
# 定义圆的颜色和线条粗细
color = (255, 0, 0)  # 蓝色
# 绘制圆
cv2.circle(img, center_coordinates, radius, color, thickness=-1, lineType=cv2.LINE_AA)
# 显示图像
cv2.imshow('Circle', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果:
在这里插入图片描述

绘制椭圆的api为:cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness, lineType, shift)。
参数说明:

img: 这是你要在其上绘制椭圆的图像。
center: 这是一个元组,表示椭圆中心的坐标 (x, y)。
axes: 这是一个元组,表示椭圆主轴的长度 (长轴长度, 短轴长度)。
angle: 这是一个浮点数,表示椭圆旋转的角度(逆时针方向)。角度是相对于 x 轴的。
startAngle: 这是一个浮点数,表示椭圆弧的起始角度,以度为单位。
endAngle: 这是一个浮点数,表示椭圆弧的结束角度,以度为单位。
color: 这是一个元组,表示椭圆的颜色。颜色是用 BGR 格式表示的。
thickness: 这是一个整数,表示椭圆轮廓的线条粗细。如果设置为 -1,则椭圆将被填充。
lineType: 这个参数指定了椭圆边缘的线型。默认值是 8,表示 8 连接线型。
shift: 这个参数是中心坐标和轴长度的小数位数。

使用案例:

import cv2
import numpy as np

# 创建一个空白的黑色图像
img = np.zeros((200, 200, 3), dtype=np.uint8)

# 定义椭圆的中心点坐标、轴长度、旋转角度、起始角度和结束角度
center_coordinates = (100, 100)
axesLength = (50, 25)
angle = 0
startAngle = 0
endAngle = 360

# 定义椭圆的颜色和线条粗细
color = (255, 0, 0)  # 蓝色
thickness = -1  # 填充椭圆

# 绘制椭圆
cv2.ellipse(img, center_coordinates, axesLength, angle, startAngle, endAngle, color, thickness)

# 显示图像
cv2.imshow('Ellipse', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值