OpenCV图像梯度算子详解:Sobel、Scharr与Laplacian实战

小石头
小石头
发布时间:2026-10-12| 2人浏览过
原创

本文深入解析OpenCV中三种核心图像梯度算子:Sobel、Scharr与Laplacian。通过详细对比与代码示例,展示如何利用这些算子进行边缘检测与轮廓提取,帮助开发者掌握不同场景下的最佳实践。

作为OpenCV图像视觉入门系列的第12篇,本文将系统讲解图像梯度算子的各类操作,重点涵盖Sobel算子、Scharr算子以及Laplacian算子的具体应用与原理。

1. Sobel算子

Sobel算子是一种基于空间滤波器的图像边缘检测工具,旨在识别图像中的边缘信息。梯度运算本质上是求导数的过程,能够有效捕捉图像中的局部变化特征。

import cv2
import numpy as np
from numpy import unicode
 
if __name__ == '__main__':
    # 不同算子的差异
    img = cv2.imread('D:/Jupyter_Notebooks/0.jpg', cv2.IMREAD_GRAYSCALE)
    sobel_x = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
    sobel_y = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
    sobel_x = cv2.convertScaleAbs(sobel_x)
    sobel_y = cv2.convertScaleAbs(sobel_y)
    sobel_xy = cv2.addWeighted(sobel_x, 0.5, sobel_y, 0.5, 0)
 
    cv2.imshow("sobel_xy", sobel_xy)
 
    img = cv2.imread('D:/Jupyter_Notebooks/0.jpg', cv2.IMREAD_GRAYSCALE)
    cv2.imshow("img", img)
 
    cv2.waitKey(0)
    cv2.destroyAllWindows()

2. Scharr算子

Sobel算子主要用于检测图像中的水平与垂直边缘,通过卷积核运算来识别图像中的细微结构变化。OpenCV作为计算机视觉库,不仅提供了Sobel算子相关函数,还集成了Canny边缘检测、Hough变换等多种图像处理算法,以满足不同的处理需求。

import cv2
import numpy as np
from numpy import unicode
 
if __name__ == '__main__':
    img = cv2.imread('D:/Jupyter_Notebooks/0.jpg', cv2.IMREAD_GRAYSCALE)
    scharrx = cv2.Scharr(img, cv2.CV_64F, 1, 0)
    scharry = cv2.Scharr(img, cv2.CV_64F, 0, 1)
    scharrx = cv2.convertScaleAbs(scharrx)
    scharry = cv2.convertScaleAbs(scharry)
    scharrxy = cv2.addWeighted(scharrx, 0.5, scharry, 0.5, 0)
 
    cv2.imshow("scharrxy", scharrxy)
 
    img = cv2.imread('D:/Jupyter_Notebooks/0.jpg', cv2.IMREAD_GRAYSCALE)
    cv2.imshow("img", img)
 
    cv2.waitKey(0)
    cv2.destroyAllWindows()

3. Laplacian算子

Laplacian算子属于二阶微分算子,主要用于检测图像中的边缘与轮廓,同时也能对图像噪声进行识别。其基本原理是计算图像中每个像素点的梯度,并根据梯度的幅值大小来判定边缘位置。

import cv2
import numpy as np
from numpy import unicode
 
if __name__ == '__main__':
    img = cv2.imread('D:/Jupyter_Notebooks/0.jpg', cv2.IMREAD_GRAYSCALE)
    laplacian = cv2.Laplacian(img, cv2.CV_64F)
    laplacian = cv2.convertScaleAbs(laplacian)
 
    cv2.imshow("laplacian", laplacian)
 
    img = cv2.imread('D:/Jupyter_Notebooks/0.jpg', cv2.IMREAD_GRAYSCALE)
    cv2.imshow("img", img)
 
    cv2.waitKey(0)
    cv2.destroyAllWindows()

至此,关于OpenCV图像梯度算子的详细介绍已告一段落。如需了解更多OpenCV图像梯度算子相关内容,欢迎查阅本站过往文章或继续阅读后续系列。感谢大家的支持!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。