当前位置:网站首页>OpenCV如何实现Sobel边缘检测
OpenCV如何实现Sobel边缘检测
2022-08-04 00:52:00 【亿速云】
OpenCV如何实现Sobel边缘检测
今天小编给大家分享一下OpenCV如何实现Sobel边缘检测的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
一、Sobel算法
1、算法概述
Sobel边缘检测算法比较简单,实际应用中效率比canny边缘检测效率要高,但是边缘不如Canny检测的准确,然而在很多实际应用的场合,sobel边缘却是首选,Sobel算子是高斯平滑与微分操作的结合体,所以其抗噪声能力很强,用途较多。尤其是在对效率要求较高,而对细纹理不太关系的时候。
使用Sobel算子提取图像边缘分3个步骤:
提取X方向的边缘,X方向一阶Sobel边缘检测算法为:

提取Y方向的边缘,Y方向一阶Sobel边缘检测算法为:

综合两个方向的边缘信息得到整幅图像的边缘。
2、主要函数
Sobel_x_or_y = cv2.Sobel(src, ddepth, dx, dy, dst, ksize, scale, delta, borderType)
src:传入的图像ddepth:图像的深度dx、dy:指的是求导的阶数,0表示这个方向上没有求导,所填的数一般为0、1、2。ksize:是Sobel算子的大小,即卷积核的大小,必须为奇数1、3、5、7。如果ksize=-1,就演变成为3x3的Scharr算子,scale是缩放导数的比例常数,默认情况为没有伸缩系数。borderType:是判断图像边界的模式,这个参数默认值为cv2.BORDER_DEFAULT。dst及dst之后的参数都是可选参数。
二、C++代码
#include <iostream>#include <opencv2\opencv.hpp>using namespace cv;using namespace std;int main(){ //----------------读取图像----------------- Mat img = imread("1.jpg"); //黑白图像边缘检测结果较为明显 Mat gray_img; cvtColor(img, gray_img, COLOR_BGR2GRAY); Mat resultX, resultY, resultXY; //-------------Sobel边缘检测-------------- //X方向一阶边缘 Sobel(img, resultX, CV_16S, 2, 0, 1); convertScaleAbs(resultX, resultX); //Y方向一阶边缘 Sobel(img, resultY, CV_16S, 0, 1, 3); convertScaleAbs(resultY, resultY); //整幅图像的一阶边缘 resultXY = resultX + resultY; //显示图像 imshow("resultX", resultX); imshow("resultY", resultY); imshow("resultXY", resultXY); waitKey(0); return 0;}三、python代码
import cv2img = cv2.imread("1.jpg")gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# -------------------Sobel边缘检测------------------------x = cv2.Sobel(gray_img, cv2.CV_16S, 1, 0)y = cv2.Sobel(gray_img, cv2.CV_16S, 0, 1)# cv2.convertScaleAbs(src[, dst[, alpha[, beta]]])# 可选参数alpha是伸缩系数,beta是加到结果上的一个值,结果返回uint类型的图像Scale_absX = cv2.convertScaleAbs(x) # convert 转换 scale 缩放Scale_absY = cv2.convertScaleAbs(y)result = cv2.addWeighted(Scale_absX, 0.5, Scale_absY, 0.5, 0)# ----------------------显示结果----------------------------cv2.imshow('img', gray_img)cv2.imshow('Scale_absX', Scale_absX)cv2.imshow('Scale_absY', Scale_absY)cv2.imshow('result', result)cv2.waitKey(0)cv2.destroyAllWindows()四、结果展示
1、灰度图

2、X方向一阶边缘

2、Y方向一阶边缘

3、整幅图像的一阶边缘

以上就是“OpenCV如何实现Sobel边缘检测”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。
边栏推荐
- 微服务的简单介绍
- 求解同余方程 数论 扩展欧几里得
- 【虚拟户生态平台】虚拟化平台安装时遇到的坑
- .NET静态代码织入——肉夹馍(Rougamo) 发布1.1.0
- 【性能优化】MySQL常用慢查询分析工具
- 电子组装行业对MES管理系统的需求分析
- How to find the cause of Fiori Launchpad routing errors by single-step debugging
- 轻量级网络整理及其在Yolov5上的实现
- Nanoprobes Alexa Fluor 488 FluoroNanogold 偶联物
- Salesforce's China business may see new changes, rumors may be closing
猜你喜欢
随机推荐
C # WPF equipment monitoring software (classic) - the next
Getting started with MATLAB 3D drawing command plot3
越来越火的图数据库到底能做什么?
LeetCode 19:删除链表的倒数第 N 个结点
Sqlnet. Ora file with the connection of authentication test
LYVE1抗体丨Relia Tech LYVE1抗体解决方案
typescript57 - Array generic interface
.NET静态代码织入——肉夹馍(Rougamo) 发布1.1.0
jmeter分布式压测
BGP实验(含MPLS)
建木DevOps流程的快速运用
咱们500万条数据测试一下,如何合理使用索引加速?
微服务的简单介绍
分析:Nomad Bridge黑客攻击的独特之处
Nanoprobes Alexa Fluor 488 FluoroNanogold 偶联物
redis中常见的问题(缓存穿透,缓存雪崩,缓存击穿,redis淘汰策略)
Vant3 - click on the corresponding name name to jump to the next page corresponding to the location of the name of the TAB bar
电子组装行业对MES管理系统的需求分析
《The Google File System》新说
Apple told Qualcomm: I bought a new campus for $445 million and may plan to speed up self-development of baseband chips









