当前位置:网站首页>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边缘检测”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。
边栏推荐
- typescript52 - simplify generic function calls
- vxe-table 从页面批量删除数据 (不动数据库里的数据)
- 带你造轮子,自定义一个随意拖拽可吸边的悬浮View组件
- 如何通过单步调试的方式找到引起 Fiori Launchpad 路由错误的原因试读版
- pcl点云数据 转化为 Eigen::Map
- LeetCode third topic (the Longest Substring Without Repeating Characters) trilogy # 3: two optimization
- 第1章:初识数据库与MySQL----MySQL安装
- 易动纷享--测试实习生视频面试
- 【超详细教程】LVS+KeepAlived高可用部署实战应用
- TypeScript学习
猜你喜欢
随机推荐
手撕Nacos源码,今日撕服务端源码
米哈游--测试开发提前批
建木DevOps流程的快速运用
七夕佳节即将来到,VR全景云游为你神助攻
Vant3 - click on the corresponding name name to jump to the next page corresponding to the location of the name of the TAB bar
Google Earth Engine ——利用公开的河流数据计算河流的有效宽度
typescript57 - Array generic interface
iframe通信
Node.js的基本使用(三)数据库与身份认证
typescript51-泛型的基本使用
corn表达式 具体详解与案例
一文参透分布式存储系统Ceph的架构设计、集群搭建(手把手)
教你如何定位不合理的SQL?并优化之
typescript55-泛型约束
c语言分层理解(c语言操作符)
ASP.NET 获取数据库的数据并写入到excel表格中
Justin Sun was invited to attend the 36氪 Yuan Universe Summit and delivered a keynote speech
C语言 函数递归
字符串的排列
Demand analysis of MES management system in electronic assembly industry