(图像梯度处理、图像边缘化检测、图像轮廓查找和绘制、透视变换、举例轮廓的外接边界框)

 梯度处理的Sobel算子函数

功能: Sobel算子是一种用于边缘检测的梯度计算方法,它通过计算图像在水平方向和垂直方向上的梯度来增强边缘信息。

参数:

  • src:输入图像。
  • ddepth:输出图像的深度,通常选择为CV_16S以避免溢出。
  • dx 和 dy:分别指定是否对x轴或y轴求导数,0表示不求导,1表示求一阶导数。
  • ksize(可选):使用的Sobel核大小,默认为3。

返回值: 经过Sobel算子处理后的图像,通常是灰度图形式。

应用: 常用于图像预处理阶段,如边缘增强,后续可用于轮廓检测等任务。

② 梯度处理Laplacian算子函数

功能: Laplacian算子也是一种常用的边缘检测工具,它通过对图像进行二阶微分运算,突出显示图像中快速变化的地方。

参数:

  • src:输入图像。
  • ddepth:输出图像的深度。
  • ksize(可选):使用的Laplacian核大小,默认为1,即使用3x3内核。

返回值: 经Laplacian算子处理后的图像。

应用: 用于检测图像中的零交叉点,可以用来标记图像中的边缘位置。

③ Canny算子函数

功能: Canny算子是多阶段的边缘检测算法,它结合了噪声抑制、非极大值抑制和滞后阈值化步骤。

参数:

  • image:输入图像。
  • threshold1:滞后阈值化的低阈值。
  • threshold2:滞后阈值化的高阈值。
  • apertureSize(可选):用于计算图像梯度的Sobel算子的孔径大小,默认为3。
  • L2gradient(可选):指定是否使用更精确但较慢的L2范数公式,默认为False。

返回值: 一个二值图像,其中白色像素(255)代表边缘。

应用: 广泛应用于计算机视觉领域,例如物体识别、跟踪等。

④ findContours函数

功能: 该函数用于查找图像中的轮廓,可以提取出图像中所有连通区域的边界点集合。

参数:

  • image:输入图像,通常是二值图像。
  • mode:轮廓检索模式,比如RETR_EXTERNAL只取最外层轮廓。
  • method:轮廓逼近方法,例如CHAIN_APPROX_SIMPLE简化曲线。

返回值:

  • 轮廓信息列表,每个元素是一个包含轮廓点坐标的numpy数组。
  • 层次结构信息(如果适用)。

应用: 用于形状分析、目标检测等领域。

⑤ drawContours函数

功能: 将给定的轮廓绘制到指定的图像上,以便可视化。

参数:

  • image:要绘制轮廓的目标图像。
  • contours:要绘制的轮廓列表。
  • contourIdx:要绘制的具体轮廓索引,-1表示绘制所有轮廓。
  • color:轮廓颜色。
  • thickness(可选):轮廓线条厚度。

返回值: 无,直接修改输入图像。

应用: 帮助开发者调试轮廓检测结果,也可用于最终结果展示。

⑥ 透视变换函数

功能: 实现图像的透视变换,可以模拟相机的不同视角或者矫正倾斜拍摄的照片。

参数:

  • src:输入图像。
  • M:3x3变换矩阵,定义了从源四边形到目标四边形的映射关系。
  • dsize:输出图像尺寸。

返回值: 经过透视变换后的图像。

应用: 用于文档扫描、车牌识别等需要矫正视图的应用场景。

⑦ 举例轮廓的外接边界框,并对比说明

示例代码:

import cv2
import numpy as np

# 假设我们有一个名为 contours 的轮廓列表
# 计算最小外接矩形
rect = cv2.minAreaRect(contour)
box = cv2.boxPoints(rect)  # 获取矩形四个顶点坐标
box = np.int0(box)

# 绘制最小外接矩形
cv2.drawContours(image, [box], 0, (0, 255, 0), 2)

# 计算并绘制简单的边界框(可能是旋转的)
x, y, w, h = cv2.boundingRect(contour)
cv2.rectangle(image, (x, y), (x+w, y+h), (0, 0, 255), 2)

对比说明:

  • 简单边界框:使用cv2.boundingRect得到的是直角矩形,即使轮廓本身是倾斜的,这个矩形也不会倾斜,因此可能不是最优拟合。
  • 最小外接矩形cv2.minAreaRect得到的是最小面积的外接矩形,它可以是任意角度的,所以对于倾斜的轮廓来说,这是更好的选择。

你可能感兴趣的:(计算机视觉,人工智能,图像处理)