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()
相关推荐
亚里随笔16 分钟前
突破性框架TRAPO:统一监督微调与强化学习的新范式,显著提升大语言模型推理能力
人工智能·深度学习·机器学习·语言模型·llm·rlhf
牛客企业服务35 分钟前
AI面试实用性解析:不是“能不能用”,而是“怎么用好”
人工智能·面试·职场和发展
MicroTech20251 小时前
激光点云快速配准算法创新突破,MLGO微算法科技发布革命性点云配准算法技术
人工智能·科技·算法
救救孩子把1 小时前
50-机器学习与大模型开发数学教程-4-12 Bootstrap方法
人工智能·机器学习·bootstrap
趣知岛1 小时前
AI是否能代替从业者
人工智能
allan bull2 小时前
在节日中寻找平衡:圣诞的欢乐与传统节日的温情
人工智能·学习·算法·职场和发展·生活·求职招聘·节日
土豆12502 小时前
程序员约会指南:从代码到爱情的完美编译
人工智能
Coder_Boy_2 小时前
SpringAI与LangChain4j的智能应用-(实践篇2)
人工智能·springboot·aiops·langchain4j
love530love2 小时前
【笔记】ComfyUI “OSError: [WinError 38] 已到文件结尾” 报错解决方案
人工智能·windows·python·aigc·comfyui·winerror 38
咕噜企业分发小米2 小时前
腾讯云向量数据库HNSW索引如何更新?
人工智能·算法·腾讯云