一.图像梯度处理
- 图像梯度处理是图像分析中的一个重要技术,用于检测图像中的边缘、纹理和结构。梯度表示图像亮度变化的方向和幅度,常用于边缘检测、特征提取和图像分割等任务。以下是 OpenCV 中常用的图像梯度处理方法及其函数。
1. 梯度计算
Sobel 算子–cv2.Sobel()`
Sobel 算子用于计算图像在水平和垂直方向的梯度。这有助于检测边缘。
函数:cv2.Sobel()
函数签名:
cv2.Sobel(src, ddepth, dx, dy, ksize, scale=1, delta=0, borderType=cv2.BORDER_DEFAULT)
参数解释:
src
:输入图像(通常是灰度图像)。ddepth
:目标图像的深度,常用cv2.CV_16S
(有符号 16 位)或cv2.CV_8U
(无符号 8 位)。dx
:x 方向的导数阶数(0 表示不计算 x 方向的梯度)。dy
:y 方向的导数阶数(0 表示不计算 y 方向的梯度)。ksize
:Sobel 卷积核的大小(常用值为 1、3、5、7)。scale
:缩放系数,用于调整结果的大小(默认值 1)。delta
:在计算梯度值时添加的偏移量(默认值 0)。borderType
:边界类型,通常使用cv2.BORDER_DEFAULT
。
示例代码:
import cv2
import numpy as np
# 读取灰度图像
gray_image = cv2.imread('gray_image.jpg', cv2.IMREAD_GRAYSCALE)
# 计算 x 方向的梯度
sobel_x = cv2.Sobel(gray_image, -1, 1, 0, ksize=3)
# 计算 y 方向的梯度
sobel_y = cv2.Sobel(gray_image,-1, 0, 1, ksize=3)
# 合并 x 和 y 方向的梯度
sobel_combined = cv2.addWeighted(sobel_x, 0.5, sobel_y, 0.5, 0)
# 显示图像
cv2.imshow('Sobel X', sobel_x)
cv2.imshow('Sobel Y', sobel_y)
cv2.imshow('Sobel Combined', sobel_combined)
cv2.waitKey(0)
cv2.destroyAllWindows()
Laplacian 算子—cv2.Laplacian()
Laplacian 算子用于计算图像的二阶导数,常用于检测边缘和角点。
函数:cv2.Laplacian()
函数签名:
cv2.Laplacian(src, ddepth, ksize=1, scale=1, delta=0, borderType=cv2.BORDER_DEFAULT)
参数解释:
src
:输入图像(通常是灰度图像)。ddepth
:目标图像的深度,常用cv2.CV_16S
或cv2.CV_8U
。ksize
:卷积核的大小(常用值为 1、3、5、7)。scale
:缩放系数(默认值 1)。delta
:添加的偏移量(默认值 0)。borderType
:边界类型(通常使用cv2.BORDER_DEFAULT
)。