一、图像梯度
把图片想象成连续函数,因为边缘部 分的像素值是与旁边像素明显有区别的,所以对图片局部求极值,就可以得到整幅图片的边缘信息了。 不过图片是二维的离散函数,导数就变成了差分,这个差分就称为图像的梯度。
二、filter2D算子
ddepth:表示目标图像的所需深度。
kernel:卷积核(或相当于相关核),单通道浮点矩阵。
edge_ex_method:边缘检测的方向,upright:垂直,level:水平。
三、Sobel算子
四、Laplacian算子
五、梯度处理
5.1、filter2D
导入模块
import cv2
import numpy as np
输入图像
img=cv2.imread('shudu3.png')
梯度处理
kernel=np.array(
[
[-1,0,1],
[-2,0,2],
[-1,0,1]
]
)
img_filter2D=cv2.filter2D(img,-1,kernel=kernel)
输出图像
cv2.imshow('img',img)
cv2.imshow('img_filter2D',img_filter2D)
cv2.waitKey(0)
完整代码
import cv2
import numpy as np
img=cv2.imread('shudu3.png')
kernel=np.array(
[
[-1,0,1],
[-2,0,2],
[-1,0,1]
]
)
img_filter2D=cv2.filter2D(img,-1,kernel=kernel)
cv2.imshow('img',img)
cv2.imshow('img_filter2D',img_filter2D)
cv2.waitKey(0)
5.2、Sobel
导入模块
import cv2
import numpy as np
输入图像
img=cv2.imread('shudu3.png')
梯度处理
img_Sobel=cv2.Sobel(img,-1,dx=1,dy=0)
输出图像
cv2.imshow('img',img)
cv2.imshow('img_Sobel',img_Sobel)
cv2.waitKey(0)
完整代码
import cv2
img=cv2.imread('shudu3.png')
img_Sobel=cv2.Sobel(img,-1,dx=1,dy=0)
cv2.imshow('img',img)
cv2.imshow('img_Sobel',img_Sobel)
cv2.waitKey(0)
5.3、Laplacian
导入模块
import cv2
import numpy as np
输入图像
img=cv2.imread('shudu3.png')
梯度处理
img_Laplacian=cv2.Laplacian(img,-1)
输出图像
cv2.imshow('img',img)
cv2.imshow('img_Laplacian',img_Laplacian)
cv2.waitKey(0)
完整代码
import cv2
img=cv2.imread('shudu3.png')
img_Laplacian=cv2.Laplacian(img,-1)
cv2.imshow('img',img)
cv2.imshow('img_Laplacian',img_Laplacian)
cv2.waitKey(0)
六、库函数
6.1、filter2D
cv.filter2D( src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]] ) -> DST
方法 | 描述 |
---|---|
src | 输入图像 |
dst | 输出图像 |
ddepth | 目标图像的所需深度,请参阅组合 |
kernel | 卷积核(或者更确切地说是相关核),单通道浮点矩阵;如果要将不同的内核应用于不同的通道,请使用 Split 将图像拆分为单独的颜色平面,然后单独处理它们。 |
anchor | anchor 的 anchor 表示 filtered 点在 kernel 中的相对位置;锚应位于内核内;默认值 (-1,-1) 表示定位点位于内核中心。 |
delta | 在将过滤的像素存储到 DST 之前添加到过滤像素的可选值。 |
borderType | 素外插方法,请参阅 BorderTypes。不支持BORDER_WRAP。 |
6.2、Sobel
cv.Sobel( src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]] ) -> dst
方法 | 描述 |
---|---|
src | 输入图像 |
dst | 输出图像 |
ddepth | 目标图像的所需深度,请参阅组合 |
dx | 导数 X 的阶数 |
dy | 导数 y 的阶数 |
ksize | 扩展 Sobel 核的大小;它必须是 1、3、5 或 7。 |
scale | 计算的导数值的可选比例因子;默认情况下,不应用缩放(有关详细信息,请参阅 getDerivKernels)。 |
delta | 在将过滤的像素存储到 DST 之前添加到过滤像素的可选值。 |
borderType | 素外插方法,请参阅 BorderTypes。不支持BORDER_WRAP。 |
6.3、Laplacian
cv.Laplacian( src, ddepth[, dst[, ksize[, scale[, delta[, borderType]]]]] ) -> dst
方法 | 描述 |
---|---|
src | 输入图像 |
dst | 与 src 具有相同大小和相同通道数的目标图像。 |
ddepth | 目标图像的所需深度,请参阅组合。 |
ksize | 用于计算二阶导数滤波器的孔径大小。有关详细信息,请参阅 getDerivKernels。大小必须为正数和奇数。 |
scale | 计算的拉普拉斯值的可选比例因子。默认情况下,不应用缩放。有关详细信息,请参阅 getDerivKernels。 |
delta | 在将结果存储在 dst 中之前添加到结果中的可选 delta 值。 |
borderType | 像素外插方法,请参阅 BorderTypes。不支持BORDER_WRAP。 |