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()
相关推荐
陈苏同学7 分钟前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
吾名招财25 分钟前
yolov5-7.0模型DNN加载函数及参数详解(重要)
c++·人工智能·yolo·dnn
鼠鼠龙年发大财1 小时前
【鼠鼠学AI代码合集#7】概率
人工智能
龙的爹23331 小时前
论文 | Model-tuning Via Prompts Makes NLP Models Adversarially Robust
人工智能·gpt·深度学习·语言模型·自然语言处理·prompt
工业机器视觉设计和实现1 小时前
cnn突破四(生成卷积核与固定核对比)
人工智能·深度学习·cnn
FL16238631292 小时前
[C++]使用纯opencv部署yolov11旋转框目标检测
opencv·yolo·目标检测
我算是程序猿2 小时前
用AI做电子萌宠,快速涨粉变现
人工智能·stable diffusion·aigc
萱仔学习自我记录2 小时前
微调大语言模型——超详细步骤
人工智能·深度学习·机器学习
湘大小菜鸡2 小时前
NLP进阶(一)
人工智能·自然语言处理
XiaoLiuLB3 小时前
最佳语音识别 Whisper-large-v3-turbo 上线,速度更快(本地安装 )
人工智能·whisper·语音识别