本文最后更新于:2024年5月7日 下午
本文摘录OpenCV 中的卷积、滤波相关操作内容,重点介绍 Opencv 中的梯度操作。
梯度和导数
平滑一般也称“模糊”,是一种简单而又常用的图像处理操作。平滑图像的目的有很多,但通常都是为了减少噪声和伪影。在降低图像分辨率的时候,平滑也是十分重要的。OpenCV 提供5种不同的平滑操作,每种操作都有对应的函数实现,这些操作平滑的结果有着细微的差别。
1. cv2.sobel()
索贝尔导数,官网链接
- 函数使用
1 |
|
- Sobel 算子
- ddepth 支持选项:
- 示例代码
1 |
|
1 |
|
为了更好地理解Sobe1算子,我们必须明确它不是真正的导数,因为它定义在离散空间上。Sobel算子实际上表示的是一个多项式,也就是说在x方向上进行二阶Sobel运算表示的并不是二阶导数,而是对抛物线函数的局部拟合。这也就说明了为什么要使用一个更大的核,更大的核拟合了更多的像素。
2. Scharr滤波器
对于$3×3$的Sobel
滤波器,梯度角距离水平或垂直方向越远,误差越明显。在OpenCV中,调用cv2.sobel()
时设置ksize
为cv2.SCHARR
,即可消除$3×3$这样小但是快的Sobel
导数滤波器所带来的误差。Scharr
滤波器和Sobel
滤波器同样很快,但是前者精度更高。因此选择$3×3$的滤波器时,应当使用Scharr
滤波器。
- 示例代码
1 |
|
3. cv2.Laplacian()
cv2.laplacian()
实现了对拉普拉斯(Laplacian)算子的离散近似
- 拉普拉斯变换
$$
Laplace (f)=\frac{\partial^{2} f}{\partial x{2}}+\frac{\partial{2} f}{\partial y^{2}}
$$
- 函数使用
1 |
|
- 示例代码
1 |
|
示例源码
参考资料
- 《学习 OpenCV3》 第十章
- https://docs.opencv.org/3.0-last-rst/modules/imgproc/doc/filtering.html?highlight=laplacian#cv2.Laplacian
文章链接:
https://www.zywvvd.com/notes/study/image-processing/opencv/opencv-gradient/opencv-gradient/
“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”
微信支付
支付宝支付