1、学习目标

使用OpenCV进行图像渐变和边缘检测。

OpenCV提供三种类型的梯度滤波器或高通滤波器,Sobel,Scharr和Laplacian。

2、使用函数方法

cv2.Laplacian()

cv2.Sobel()

cv2.Scharr()

3、程序

opencv 图像矫正 python opencv图像变化检测_默认值


结果

opencv 图像矫正 python opencv图像变化检测_默认值_02


程序函数讲解:

(1)

关于滤波

过滤是信号和图像处理中基本的任务,目的是根据应用环境的不同,选择性的提取图像中某些认为重要的信号。过滤可以移除图像中的噪音、提取感兴趣的可视特征、允许图像重采样等等。

(2)

Sobel 算子的原理:

图像中的边缘区域像素值会发生“跳跃”,对这些像素求导,其一阶导数在边缘位置为极值 。

sobel过滤器是带有方向过滤器

cv2.Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]])
参数:
必选参数:

src - 需要处理的图像。
ddepth - 图像深度。-1 表示采用与原图像相同的深度。目标图像深度≥原图像深度。
dx, dy - 求导阶数,0 表示不求导。
可选参数:

ksize - Sobel 算子大小,必须为 1、3、5、7。
scale - 缩放导数的比例常数,默认情况下不伸缩。
delta - 可选增量,会加到最终 dst 中,默认情况下不额外增加。
borderType - 判断图像边界的模式。默认值为 cv2.BORDER_DEFAULT。

由于 Sobel 函数求导数后会有负值,还会有大于 255 的值,而原图像是 uint8 ,所以 Sobel 建立的图像位数不够,会有截断。

所以sobel图像还要再转为uint8

(3)

Laplace 函数实现的方法是先用 Sobel 算子计算二阶 x 和 y 导数,再求和

opencv 图像矫正 python opencv图像变化检测_ci_03

Laplacian( src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT );
 参数:
src_gray    :输入图像。
dst         :目标(输出)图像
ddepth      :目标图像的深度。由于我们的输入是CV_8U,我们定义ddepth = CV_16S以避免溢出
kernel_size :要在内部应用的Sobel运算符的内核大小。
scale,delta和BORDER_DEFAULT:我们将它们保留为默认值。

(4)
Scharr用于在水平和垂直方向上检测图像的二阶导数

Scharr(src, dst, ddepth, dx, dy)
参数:
src    - 表示源(输入)图像的类Mat的对象。
dst    - 类Mat的对象,表示目标(输出)图像。
ddepth - 表示图像深度的整数变量(-1)
dx     - 表示x导数的整数变量。(0或1)
dy     - 表示y导数的整数变量。(0或1)