当前位置:网站首页>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边缘检测”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。
边栏推荐
- 即席查询——Presto
- 【性能优化】MySQL性能优化之存储引擎调优
- typescript58 - generic classes
- VR全景拍摄线上展馆,3D全景带你沉浸体验
- 浅谈我国产业园区未来的发展方向
- Nanoprobes 棕榈酰纳米金相关说明书
- 电子制造企业部署WMS仓储管理系统的好处是什么
- ENS域名注册量创历史新高 逆市增长之势?光环之下存在炒作风险
- The 600MHz band is here, will it be the new golden band?
- A Preliminary Study of RSS Subscription to WeChat Official Account-feed43
猜你喜欢

Install third-party packages via whl

Vant3 - click on the corresponding name name to jump to the next page corresponding to the location of the name of the TAB bar

Node.js的基本使用(三)数据库与身份认证

Using matlab to solve the linear optimization problem based on matlab dynamic model of learning notes _11 】 【

LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之三:两次优化

第1章:初识数据库与MySQL----MySQL安装

redis中常见的问题(缓存穿透,缓存雪崩,缓存击穿,redis淘汰策略)

MPLS Comprehensive Experiment

七夕活动浪漫上线,别让网络拖慢和小姐姐的开黑时间

ML18-自然语言处理
随机推荐
typescript56-泛型接口
【性能优化】MySQL常用慢查询分析工具
BioVendor人Clara细胞蛋白(CC16)Elisa试剂盒检测步骤
七夕佳节即将来到,VR全景云游为你神助攻
如何通过单步调试的方式找到引起 Fiori Launchpad 路由错误的原因试读版
【详细教程】一文参透MongoDB聚合查询
nodeJs--async/await
Spinnaker调用Jenkins API 返回403错误
高斯推断推导
【面经】被虐了之后,我翻烂了equals源码,总结如下
C # WPF equipment monitoring software (classic) - the next
分子个数 数论(欧拉函数 前缀和
C 学生管理系统_添加学生
What warehouse management problems can WMS warehouse management system solve in the electronics industry?
因为一次bug的教训,我决定手撕Nacos源码(先撕客户端源码)
600MHz频段来了,它会是新的黄金频段吗?
pcl点云数据 转化为 Eigen::Map
易动纷享--测试实习生视频面试
jmeter distributed stress test
ASP.NET 获取数据库的数据并写入到excel表格中