OpenCV——Scharr边缘检测

目录

OpenCV------Scharr边缘检测由CSDN点云侠原创,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。

一、Scharr算法

1、算法概述

Scharr边缘检测算法是对Sobel算子差异性的增强,因此两者在检测图像边缘的原理和使用方式上相同。Scharr算子的边缘检测滤波尺寸为3x3,因此也可称其为Scharr滤波器。可以通过将滤波器中的权重系数放大来增大像素见的差异,Scharr算子就是采用这种思想,其在X方向一阶Scharr边缘检测算子为:

− 3 0 3 − 10 0 10 − 3 0 3 \] (1) \\left\[ \\begin{matrix} -3 \& 0 \& 3\\\\ -10 \& 0 \& 10 \\\\ -3 \& 0 \& 3 \\end{matrix} \\right\] \\tag{1} −3−10−30003103 (1) Y方向一阶Scharr边缘检测算子为: \[ − 3 10 − 3 0 0 0 3 10 3 \] (2) \\left\[ \\begin{matrix} -3 \& 10 \& -3\\\\ 0 \& 0 \& 0 \\\\ 3 \& 10 \& 3 \\end{matrix} \\right\] \\tag{2} −30310010−303 (2) ### 2、主要函数 ```cpp void Scharr( InputArray src, OutputArray dst, int ddepth, int dx, int dy, double scale = 1, double delta = 0, int borderType = BORDER_DEFAULT ) ``` * `src`:传入的图像 * `ddepth`:图像的深度,可以为-1、CV_16S、CV_32F、CV_64F。 * `dx`、`dy`:指的是求导的阶数,0表示这个方向上没有求导,所填的数一般为0、1、2。 * `scale`:计算可选比例因子,默认值1 。 * `delta`:加到输出像素的偏值,默认为0 。 * `borderType`:边界类型,默认值BORDER_DEFAULT。 ## 二、C++代码 ```cpp #include #include using namespace cv; using namespace std; int main() { //读取图像,黑白图像边缘检测结果较为明显 Mat img = imread("2.jpg", IMREAD_ANYDEPTH); if (img.empty()) { cout << "请确认图像文件名称是否正确" << endl; return -1; } Mat resultX, resultY, resultXY; //X方向一阶边缘 Scharr(img, resultX, CV_16S, 1, 0); convertScaleAbs(resultX, resultX); //Y方向一阶边缘 Scharr(img, resultY, CV_16S, 0, 1); convertScaleAbs(resultY, resultY); //整幅图像的一阶边缘 resultXY = resultX + resultY; //显示图像 imshow("resultX", resultX); imshow("resultY", resultY); imshow("resultXY", resultXY); waitKey(0); return 0; } ``` ## 三、python代码 ```python import cv2 img = cv2.imread("2.jpg") gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # -------------------Scharr边缘检测------------------------ x = cv2.Scharr(gray_img, cv2.CV_16S, 1, 0) y = cv2.Scharr(gray_img, cv2.CV_16S, 0, 1) # cv2.convertScaleAbs(src[, dst[, alpha[, beta]]]) # 可选参数alpha是伸缩系数,beta是加到结果上的一个值,结果返回uint类型的图像 Scharr_absX = cv2.convertScaleAbs(x) # convert 转换 scale 缩放 Scharr_absY = cv2.convertScaleAbs(y) result = cv2.addWeighted(Scharr_absX, 0.5, Scharr_absY, 0.5, 0) # ----------------------显示结果---------------------------- cv2.imshow('origin_img', img) cv2.imshow('img', gray_img) cv2.imshow('Scharr_absX', Scharr_absX) cv2.imshow('Scharr_absY', Scharr_absY) cv2.imshow('result', result) cv2.waitKey(0) cv2.destroyAllWindows() ``` ## 四、结果展示 ### 1、灰度图 ![在这里插入图片描述](https://file.jishuzhan.net/article/1749746389119668225/b8d897b87dbcba364e99858f079337d7.webp) ### 2、X方向一阶边缘 ![在这里插入图片描述](https://file.jishuzhan.net/article/1749746389119668225/d9ca31b7c874eabf2d6786ef8b70a222.webp) ### 2、Y方向一阶边缘 ![在这里插入图片描述](https://file.jishuzhan.net/article/1749746389119668225/a454885a29e125a24a0436add2be0997.webp) ### 3、整幅图像的一阶边缘 ![在这里插入图片描述](https://file.jishuzhan.net/article/1749746389119668225/a4335f4a58a740645f3fcd65e8cfd52d.webp) ## 五、相关链接 \[1\] [Scharr(边缘提取)](https://www.jianshu.com/p/27f883dd596f)

相关推荐
坚持编程的菜鸟1 分钟前
LeetCode每日一题——困于环中的机器人
c语言·算法·leetcode·机器人
DataLaboratory27 分钟前
Python爬取百度地图-前端直接获取
爬虫·python·百度地图
ACP广源盛139246256731 小时前
(ACP广源盛)GSV1175---- MIPI/LVDS 转 Type-C/DisplayPort 1.2 转换器产品说明及功能分享
人工智能·音视频
Aurorar0rua2 小时前
C Primer Plus Notes 09
java·c语言·算法
胡耀超2 小时前
隐私计算技术全景:从联邦学习到可信执行环境的实战指南—数据安全——隐私计算 联邦学习 多方安全计算 可信执行环境 差分隐私
人工智能·安全·数据安全·tee·联邦学习·差分隐私·隐私计算
Turnsole_y3 小时前
pycharm自动化测试初始化
python·selenium
停停的茶3 小时前
深度学习(目标检测)
人工智能·深度学习·目标检测
R-G-B3 小时前
【02】C#入门到精通——C# 变量、输入/输出、类型转换
开发语言·c#·c# 变量·c#输入/输出·c#类型转换
星河队长3 小时前
C# 软件加密方法,有使用时间限制,同时要防止拷贝
开发语言·c#
Y200309163 小时前
基于 CIFAR10 数据集的卷积神经网络(CNN)模型训练与集成学习
人工智能·cnn·集成学习