012 OpenCV sobel边缘检测

目录

一、环境

二、soble原理介绍

三、源码实验


一、环境

本文使用环境为:

  • Windows10
  • Python 3.9.17
  • opencv-python 4.8.0.74

二、soble原理介绍

Sobel边缘检测是一种广泛应用于图像处理领域的边缘检测算法,它通过计算图像灰度函数在水平方向和垂直方向的梯度来检测边缘。Sobel算法通过计算邻域像素的加权差值来估计像素点处的梯度大小,从而确定边缘的方向和强度。

Sobel边缘检测算法主要由两个3x3的卷积核组成,一个用于水平方向,一个用于垂直方向。这两个卷积核可以分别计算出图像在水平方向和垂直方向的梯度大小。具体来说,水平卷积核对图像进行卷积运算,得到图像在水平方向上的梯度值;垂直卷积核对图像进行卷积运算,得到图像在垂直方向上的梯度值。然后将这两个梯度值相加,得到每个像素点处的边缘强度。

Sobel边缘检测算法具有以下优点:

  1. 简单易用:Sobel算法实现简单,易于理解和应用。
  2. 效果较好:Sobel算法能够有效地检测出图像中的边缘,并且对噪声有一定的抑制作用。
  3. 方向敏感:Sobel算法能够检测出边缘的方向信息,这对于后续的图像处理和分析非常重要。

然而,Sobel边缘检测算法也存在一些缺点:

  1. 对噪声敏感:Sobel算法对噪声比较敏感,可能会将噪声误判为边缘。
  2. 检测结果受阈值影响:Sobel算法的检测结果受阈值影响较大,选择合适的阈值比较困难。
  3. 计算量大:Sobel算法需要进行两次卷积运算,计算量较大,对于大型图像的处理速度较慢。

在实际应用中,可以根据具体需求选择不同的边缘检测算法。如果需要简单快速地检测边缘,可以选择Sobel算法;如果需要更精确地检测边缘,可以选择Canny算法;如果需要在大规模图像上进行处理,可以选择基于小波变换的边缘检测算法等。

总之,Sobel边缘检测算法是一种经典的边缘检测算法,它具有简单易用、效果较好、方向敏感等优点,但也存在对噪声敏感、计算量大等缺点。在实际应用中,需要根据具体需求选择合适的边缘检测算法。

三、源码实验

cpp 复制代码
import sys
import cv2 as cv

def main():
    window_name = ('Sobel Demo - Simple Edge Detector')
    scale = 1
    delta = 0
    ddepth = cv.CV_16S
    # 读取图片
    src = cv.imread("data/fruits.jpg", cv.IMREAD_COLOR)
    # 高斯平滑,用于降噪
    src = cv.GaussianBlur(src, (3, 3), 0)
    # 转为灰度图
    gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
    # 利用sobel求解x方向边缘
    # grad_x = cv.Scharr(gray,ddepth,1,0)
    grad_x = cv.Sobel(gray, ddepth, 1, 0, ksize=3, scale=scale, delta=delta, borderType=cv.BORDER_DEFAULT)
    # 利用sobel求解y方向边缘
    # grad_y = cv.Scharr(gray,ddepth,0,1)
    grad_y = cv.Sobel(gray, ddepth, 0, 1, ksize=3, scale=scale, delta=delta, borderType=cv.BORDER_DEFAULT)
    
    # grad_x可能有负数,所以需要转为 uint8
    abs_grad_x = cv.convertScaleAbs(grad_x)
    abs_grad_y = cv.convertScaleAbs(grad_y)
    # 将x和y方向的梯度相加
    grad = cv.addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0)

    cv.imshow(window_name, grad)
    cv.waitKey(0)
    return 0

if __name__ == "__main__":
    main()
相关推荐
weixin_446260857 分钟前
掌握 Claude Code Hooks:让 AI 变得更聪明!
人工智能
小白|9 分钟前
CANN性能调优实战:从Profiling到极致优化的完整方案
人工智能
哈__10 分钟前
CANN加速图神经网络GNN推理:消息传递与聚合优化
人工智能·深度学习·神经网络
渣渣苏10 分钟前
Langchain实战快速入门
人工智能·python·langchain
七月稻草人11 分钟前
CANN 生态下 ops-nn:AIGC 模型的神经网络计算基石
人工智能·神经网络·aigc·cann
User_芊芊君子12 分钟前
CANN_MetaDef图定义框架全解析为AI模型构建灵活高效的计算图表示
人工智能·深度学习·神经网络
I'mChloe13 分钟前
CANN GE 深度技术剖析:图优化管线、Stream 调度与离线模型生成机制
人工智能
凯子坚持 c14 分钟前
CANN 生态全景:`cann-toolkit` —— 一站式开发套件如何提升 AI 工程效率
人工智能
lili-felicity16 分钟前
CANN流水线并行推理与资源调度优化
开发语言·人工智能
皮卡丘不断更17 分钟前
告别“金鱼记忆”:SwiftBoot v0.1.5 如何给 AI 装上“永久项目大脑”?
人工智能·系统架构·ai编程