文章目录
- 1. cv2.minAreaRect
- 2. cv2.boxPoints()
- 3. cv2.drawContours()
- 4. cv2.GaussianBlur
- 5. cv2.Laplacian
1. cv2.minAreaRect
函数cv2.minAreaRect()
是OpenCV中用于计算最小外接矩形的函数。它可以根据给定的轮廓点集,计算出一个包围该轮廓的最小外接矩形。
以下是cv2.minAreaRect()
函数的基本用法和参数说明:
rect = cv2.minAreaRect(points)
参数解释:
points
:包含轮廓点集的数组或矩阵。每个点可以表示为(x, y)
的二维坐标。rect
:返回的最小外接矩形,是一个(center(x, y), (width, height), angle)
的元组。其中,center
表示矩形中心点的坐标,(width, height)
表示矩形的宽度和高度,angle
表示矩形的倾斜角度(逆时针方向为正)。
下面是一个简单的示例,演示了如何使用cv2.minAreaRect()
函数计算轮廓的最小外接矩形:
import cv2
# 读取图像并转换为灰度图像
image = cv2.imread('your_image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 使用阈值化或其他方法得到轮廓
_, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 获取最小外接矩形
rect = cv2.minAreaRect(contours[0])
# 绘制最小外接矩形
box = cv2.boxPoints(rect)
box = np.int0(box)
cv2.drawContours(image, [box], 0, (0, 255, 0), 2)
# 显示图像
cv2.imshow('Min Area Rectangle', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
在上述示例中,我们首先将图像转换为灰度图像,并使用阈值化操作、边缘检测等方法获取轮廓。然后,通过调用cv2.minAreaRect()
函数来计算最小外接矩形。接着,使用cv2.boxPoints()
函数将最小外接矩形转换为顶点坐标,并使用cv2.drawContours()
函数绘制该矩形的边界框。最后,显示带有绘制矩形的图像。
4.8.0.74版本举例:
2. cv2.boxPoints()
cv2.boxPoints()
是OpenCV中的一个函数,用于计算给定旋转矩形的顶点坐标。旋转矩形是一个矩形,可以在图像中进行旋转。cv2.boxPoints()
函数接受一个表示旋转矩形的参数,并返回一个四个顶点坐标的NumPy数组。
函数原型如下:
points = cv2.boxPoints(box)
其中,box
是表示旋转矩形的参数,它可以是一个元组或一个包含4个浮点数的数组,表示旋转矩形的中心点坐标、宽度、高度和旋转角度。
cv2.boxPoints()
函数返回一个形状为(4, 2)的NumPy数组,其中每一行表示一个顶点的坐标。
以下是一个示例,演示如何使用cv2.boxPoints()
函数计算旋转矩形的顶点坐标:
import cv2
# 创建一个旋转矩形
rect = ((100, 100), (200, 100), 30) # 格式为((中心点坐标), (宽度, 高度), 旋转角度)
# 计算顶点坐标
points = cv2.boxPoints(rect)
print(points)
在示例中,我们创建了一个旋转矩形rect
,其中旋转角度为30度。然后调用cv2.boxPoints()
函数计算旋转矩形的顶点坐标,并将结果存储在points
中。最后,我们打印出顶点坐标。
运行代码后,你将得到一个形状为(4, 2)的NumPy数组,其中每一行表示旋转矩形的一个顶点的坐标。
注意:返回的坐标顺序是不确定的。
3. cv2.drawContours()
函数cv2.drawContours()
是OpenCV中用于绘制轮廓的函数之一。它可以在图像上绘制指定的轮廓,用于可视化和分析图像中的对象边界。
以下是cv2.drawContours()
函数的基本用法和参数说明:
image = cv2.drawContours(image, contours, contourIdx, color, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]])
参数解释:
image
:用于绘制轮廓的输入图像。contours
:包含所有轮廓的列表。每个轮廓是一个由点组成的数组。contourIdx
:表示要绘制的轮廓索引,-1表示绘制所有轮廓。color
:绘制轮廓的颜色,可以是一个RGB元组或整数值。例如,(0, 255, 0)表示绿色轮廓。thickness
:绘制轮廓的线条宽度,为正整数。使用-1
表示填充轮廓内部。lineType
(可选):指定绘制线条的类型,默认为8连接线。可以使用cv2.LINE_AA
来绘制抗锯齿线条。hierarchy
(可选):用于轮廓的层次结构信息。通常在查找轮廓时会返回。如果不需要轮廓层次信息,可以忽略。maxLevel
(可选):绘制轮廓的最大层级,如果设置为0,则绘制所有层级的轮廓。默认值为0。offset
(可选):绘制轮廓的偏移量,用于对轮廓进行平移。默认情况下为(0, 0)
。
示例使用方法如下:
import cv2
import numpy as np
# 读取图像并转换为灰度图像
image = cv2.imread('your_image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 使用阈值化或其他方法得到轮廓
_, threshold = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, _ = cv2.findContours(threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 绘制轮廓
cv2.drawContours(image, contours, -1, (0, 255, 0), 2)
# 显示图像
cv2.imshow('Contours', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
在上述示例中,我们首先将图像转换为灰度图像,然后使用阈值化操作、边缘检测等方法得到轮廓。接下来,使用cv2.drawContours()
函数绘制图像中的轮廓,并将其显示出来。通过调整参数,如轮廓索引、颜色、线条宽度等,可以对绘制的轮廓进行不同样式的定制。
4. cv2.GaussianBlur
cv2.GaussianBlur()
是OpenCV中的一个函数,用于对图像进行高斯模糊处理。高斯模糊是一种常用的图像平滑滤波方法,它利用高斯函数对图像进行加权平均,降低图像的噪声和细节。
函数原型如下:
blurred_image = cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]])
参数说明:
src
:输入图像,可以是单通道或多通道图像(8位无符号或浮点型)。ksize
:高斯核的大小,指定为ksize=(width, height)
,width和height必须是奇数且大于0。它表示在X和Y方向上的高斯核大小。sigmaX
:在X方向上的高斯核标准差。dst
:可选参数,输出图像。sigmaY
:可选参数,在Y方向上的高斯核标准差,如果未指定,则默认与sigmaX相等。borderType
:可选参数,用于处理边界的插值方法,默认为cv2.BORDER_DEFAULT
。
以下是一个示例,演示如何使用cv2.GaussianBlur()
函数对图像进行高斯模糊处理:
import cv2
# 读取图像
image = cv2.imread('image.jpg')
# 高斯模糊处理
blurred_image = cv2.GaussianBlur(image, (5, 5), 0)
# 显示原始图像和模糊处理后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Blurred Image', blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
在示例中,我们首先使用cv2.imread()
函数读取一张图像。然后,我们使用cv2.GaussianBlur()
函数对图像进行高斯模糊处理,指定了高斯核大小(5, 5)
和标准差0
。最后,我们使用cv2.imshow()
函数显示原始图像和模糊处理后的图像。
运行代码后,你将看到显示了原始图像和经过高斯模糊处理后的图像。模糊处理后的图像会减少噪声,并使图像变得更加平滑。
5. cv2.Laplacian
cv2.Laplacian()
是OpenCV中的一个函数,用于对图像进行Laplacian滤波处理,以检测图像中的边缘。Laplacian滤波器是一种二阶微分滤波器,它对图像的二阶导数进行计算,从而凸显出图像中的边缘或颜色变化区域。
函数原型如下:
dst = cv2.Laplacian(src, ddepth[, dst[, ksize[, scale[, delta[, borderType]]]]])
参数说明:
src
:输入图像,一般为灰度图像(单通道图像)。ddepth
:输出图像的深度,可以是cv2.CV_64F
或-1
(表示与输入图像的深度相同)。dst
:可选参数,输出图像。ksize
:可选参数,Laplacian滤波器的孔径大小,必须为一个奇数。如果忽略该参数,默认使用3x3的孔径。scale
:可选参数,可选参数,将计算结果进行缩放的比例因子,默认为1。delta
:可选参数,将计算结果进行平移的数值,默认为0。borderType
:可选参数,用于处理边界的插值方法,默认为cv2.BORDER_DEFAULT
。
以下是一个示例,演示如何使用cv2.Laplacian()
函数对图像进行Laplacian滤波处理:
import cv2
import numpy as np
# 读取灰度图像
image_gray = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
# 使用Laplacian滤波器处理图像
laplacian = cv2.Laplacian(image_gray, cv2.CV_64F)
# 将结果取绝对值并转换为8位无符号整数类型
laplacian = np.uint8(np.absolute(laplacian))
# 显示原始图像和Laplacian滤波器处理后的图像
cv2.imshow('Original Image', image_gray)
cv2.imshow('Laplacian Filter', laplacian)
cv2.waitKey(0)
cv2.destroyAllWindows()
在示例中,我们首先使用cv2.imread()
函数读取一张图像,并将其转换为灰度图像。然后,我们使用cv2.Laplacian()
函数对灰度图像进行Laplacian滤波处理,指定了输出图像的深度cv2.CV_64F
。接下来,我们将结果取绝对值,转换为8位无符号整数类型(np.uint8
)。最后,我们使用cv2.imshow()
函数显示原始图像和经过Laplacian滤波处理后的图像。
运行代码后,你将看到显示了原始灰度图像和经过Laplacian滤波处理后的图像,边缘或颜色变化区域会变得更加明显。