当前位置: 首页 > news >正文

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

三、源码实验

import sys
import cv2 as cvdef main():window_name = ('Sobel Demo - Simple Edge Detector')scale = 1delta = 0ddepth = 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可能有负数,所以需要转为 uint8abs_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 0if __name__ == "__main__":main()

http://www.lryc.cn/news/250517.html

相关文章:

  • 【开源视频联动物联网平台】libmodbus 写一个modbus tcp客户端
  • 安装以及使用 stylepro_artistic 所遇问题解决
  • 【Rust】所有权的认识
  • 中间件安全:Weblogic 漏洞.(使用工具可以利用多种类型漏洞)
  • matlab操作方法(一)——向量及其操作
  • MicroPython标准库
  • 2023年产业数据价值化峰会暨数栖大会-核心PPT资料下载
  • 深入理解 Vue 组件:构建优雅的前端应用
  • 基于SpringBoot+Vue的前后端分离的房屋租赁系统2
  • PHPExcel 导出Excel报错:PHPExcel_IOFactory::load()
  • Jmeter-分布式压测(远程启动服务器,windows)
  • 【C++】string类模拟实现过程中值得注意的点
  • 大数据湖项目建设方案:文档全文101页,附下载
  • 通付盾Web3专题 | SharkTeam:起底朝鲜APT组织Lazarus Group,攻击手法及洗钱模式
  • <蓝桥杯软件赛>零基础备赛20周--第8周第1讲--十大排序
  • 数据增强让模型更健壮
  • Redis远程字典服务
  • Hdoop学习笔记(HDP)-Part.15 安装HIVE
  • vue3+element-plus之el-date-picker日期选择器清空无回调的解决方案
  • 【虚拟机】Docker基础 【二】
  • CSS 绝对定位问题和粘性定位介绍
  • matlab 计算两点云之间的放缩倍数
  • MySQL-数据库设计与实现
  • 后端返回图片流前端展示图片
  • 解决 from . import _imaging as core ImportError: DLL load failed: 找不到指定的模块。
  • springBoot3.2 + jdk21 + GraalVM上手体验
  • Python float(input())的用法,web中的应用
  • uniapp是否可以用elementUI等前端UI库、使用步骤以及需要注意的问题
  • 在vue中如何书写 SSR 友好的代码
  • 开源与闭源:数字时代大模型之辩