OpenCV库学习之cv2.Sobel函数

OpenCV库学习之cv2.Sobel函数

一、简介

cv2.Sobel是OpenCV库中用于边缘检测的函数。它基于Sobel算子,通过计算图像在水平和垂直方向上的一阶导数来检测边缘。Sobel算子是一种离散差分算子,能够有效地突出图像中的高频变化区域,即边缘。

二、语法和参数

cv2.Sobel函数的基本语法如下:

cv2.Sobel(src, ddepth, dx, dy, ksize=3, scale=1, delta=0, borderType=None)
  • src:输入图像,必须是单通道灰度图像。
  • ddepth:输出图像的深度,通常使用cv2.CV_64F表示64位浮点类型。
  • dx:x方向上的导数阶数,通常为1。
  • dy:y方向上的导数阶数,通常为0(与dx相反)。
  • ksize:卷积核的大小,默认为3。
  • scale:缩放因子,用于控制输出图像的强度。
  • delta:在计算导数时添加到结果中的值。
  • borderType:边界类型,用于处理图像边缘的像素。

三、实例

3.1 基本边缘检测
import cv2# 读取图像
image = cv2.imread('path_to_image.jpg', cv2.IMREAD_GRAYSCALE)# 应用Sobel算子
sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0)
sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1)# 计算梯度幅度
magnitude = cv2.magnitude(sobel_x, sobel_y)# 归一化并转换为8位图像
magnitude = cv2.normalize(magnitude, None, 0, 255, cv2.NORM_MINMAX)
magnitude = np.uint8(magnitude)# 显示结果
cv2.imshow('Sobel Gradient Magnitude', magnitude)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出:
显示图像的Sobel梯度幅度,突出显示边缘。

3.2 应用阈值处理
import cv2
import numpy as np# 读取图像
image = cv2.imread('path_to_image.jpg', cv2.IMREAD_GRAYSCALE)# 应用Sobel算子
sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0)
sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1)# 计算梯度幅度
magnitude = cv2.magnitude(sobel_x, sobel_y)# 应用阈值处理
_, edge = cv2.threshold(magnitude, 50, 255, cv2.THRESH_BINARY)# 显示结果
cv2.imshow('Sobel Edge Detection', edge)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出:
显示经过阈值处理后的边缘检测结果。

四、注意事项

  • 确保输入图像是单通道灰度图像。
  • ddepth参数通常设置为cv2.CV_64F以获得更精确的梯度计算结果。
  • 在实际应用中,可能需要根据具体需求调整ksizescaledelta参数。
  • 使用cv2.normalize函数时,确保输出图像的值域在0到255之间,以便显示。
  • 阈值处理是可选的,可以根据需要选择是否应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/51704.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c-periphery RS485串口库文档serial.md(serial.h)(非阻塞读)(VMIN、VTIME)

c-peripheryhttps://github.com/vsergeev/c-periphery 文章目录 NAMESYNOPSISENUMERATIONS关于奇偶校验枚举类型 DESCRIPTIONserial_new()serial_open()关于流控制软件流控制(XON/XOFF)硬件流控制(RTS/CTS)选择流控制方法 serial_…

独立3D网络游戏《战域重甲》开发与上架经验分享

“ 小编阿麟:心之所向便是光,我们都是追光者!这位独立游戏开发者的产品能力已经不输给许多小团队,希望他的故事和经验分享,可以给走在同样道路上的朋友一些信心和帮助。 背景介绍 2023年年底的时候,我突然有一个很强的…

防火墙简单学习

文章目录 防火墙主要功能防火墙类型 防火墙主要功能 防火墙是一种网络安全设备,它通过监控和控制进出网络的数据包来保护内部网络不受外部攻击和威胁。防火墙的主要功能包括: 访问控制:防火墙可以限制哪些设备和用户可以访问网络资源&#x…

硬件工程师笔面试真题汇总

目录 1、电阻 1)上拉电阻的作用 2)PTC热敏电阻作为电源电路保险丝的工作原理 2、电容 1)电容的特性 2) 电容的特性曲线 3) 1uf的电容通常来滤除什么频率的信号 3、电感 4、二极管 1)二极管特性 2)二极管伏安…

HVV | .NET 攻防工具库,值得您拥有!

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

软考高级第四版备考--第32天(新一代信息技术及应用)

1、物联网 1.1技术基础 1.1.1感知层:由各种传感器构成,包括温度传感器,二维码标签、RFID标签和读写器,摄像头,GPS等感知终端。感知层是物联网识别物体、采集信息的来源。 1.1.2网络层:由各种网络&#x…

《破解验证码:用Requests和Selenium实现模拟登录的终极指南》

两种模拟登录方式(图形验证码) 超级鹰 打码平台,用于识别验证码 requests模拟登录 from chaojiying import Chaojiying_Client import requests from requests import Session from lxml import etree #获取图片信息 def get_pic_info(img_name):chaojiying Ch…

10个append()函数在Python程序开发中的创新应用

文末赠免费精品编程资料~~ 在Python编程的世界里,append()函数是列表操作中最常见的方法之一。它允许我们在列表的末尾添加一个元素,这一简单的功能却能激发无限的创造力。今天,我们将探讨append()函数在Python程序开发中的10种创新应用&…

分布式文件存储行业解决方案和技术选型分析

分布式文件存储行业解决方案和技术选型分析 前言 上一集,我们已经完成了初始化测试报告以及判断压测类型的实战,我们在文章的末尾提到了文件上传的问题以及文件存储的问题,也说了接下来的几集中,我们会讨论分布式文件存储的内容…

代码随想录第23天|回溯

39.组合总和 题目链接/文章讲解: 代码随想录 视频讲解:带你学透回溯算法-组合总和(对应「leetcode」力扣题目:39.组合总和)| 回溯法精讲!_哔哩哔哩_bilibili 第一想法: 组合总和与第22天组合总…

爬虫实战-掌上高考网实战

1.确定需求:爬取什么数据爬取大学名称 2.找到数据源地址数据在哪个链接中https://api.zjzw.cn/web/api/?keyword&page1&province_id&ranktype&request_type1&size20&top_school_id[3703,2461,659,3117,597,1724]&type&uriapidata/…

2024电赛H题参考方案——自动行使小车

目录 一、题目要求 二、参考资源获取 三、参考方案 1、环境搭建及工程移植 2、移植MPU6050模块 3、移植TB6612电机驱动模块 其他模块根据需要移植 总结 一、题目要求 小编自认为:此次H题属于控制类题目,相较于往年较为简单,功能也算单一&…

Vue3响应式高阶用法之toRaw()

Vue3响应式高阶用法之toRaw() 文章目录 Vue3响应式高阶用法之toRaw()一、简介二、使用场景2.1 性能优化2.2 与外部库的集成 三、基本使用3.1 创建响应式对象3.2 获取原始对象3.3 修改原始对象 四、功能详解4.1 toRaw的工作原理4.2 使用注意事项 五、最佳实践及案例5.1 性能优化…

基于深度学习的智能手势识别系统

基于深度学习的石头剪刀布手势识别(UI界面YOLOv8/v7/v6/v5代码训练数据集) 引言 石头剪刀布是一种简单而有趣的游戏。通过基于深度学习的手势识别系统,我们可以自动检测和识别玩家的手势。本文将详细介绍如何构建一个石头剪刀布手势识别系统…

C++类与对象-总结实践篇

为了总结熟悉类与对象相关的语法,本文通过实现经典的日期计算来练习巩固这一块的知识 目录 一、要实现的功能 二、难点分析 2.1 判断日期大小 2.2 日期加/减对应天数 2.3 两个日期相减 三、源代码 牛客网日期类相关练习题: 日期累加_牛客题霸_牛…

Oracle 19c打Datapatch数据补丁报错处理

Oracle 19c打Datapatch数据补丁报错处理 错误分析重新编译补丁验证安装完数据库补丁后,在数据补丁的步骤收到以下报错: Connecting to database...OK Gathering database info...done Bootstrapping registry and package to current versions...done Determining current s…

【Java】韩顺平Java学习笔记 第19章 IO流

文章目录 文件概述常用的文件操作创建文件获取文件信息目录的操作和文件删除流的分类各抽象类常用子类对象FileInputStreamFileOutputStreamFileReaderFileWriter 节点流和处理流概念BufferedReaderBufferedWriterBufferedInputStream & BufferedOutputStream 对象流&#…

LeetCode 算法:搜索插入位置 c++

原题链接🔗:搜索插入位置 难度:简单⭐️ 题目 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(l…

Python | TypeError: ‘module’ object is not callable

Python | TypeError: ‘module’ object is not callable 在Python编程中,遇到“TypeError: ‘module’ object is not callable”这类错误通常表明你尝试像函数一样调用了一个模块。这种错误通常是由于导入模块时的疏忽或误解导致的。本文将深入探讨此错误的根源&…

2024年7月23日~2024年7月29日周报

目录 一、前言 二、完成情况 2.1 一种具有边缘增强特点的医学图像分割网络 2.2 融合边缘增强注意力机制和 U-Net 网络的医学图像分割 2.3 遇到的困难 三、下周计划 一、前言 上周参加了一些师兄师姐的论文讨论会议,并完成了初稿。 本周继续修改论文&#xff0…