OpenCV——SUSAN边缘检测

目录

  • 一、SUSAN算法
  • 二、代码实现
  • 三、结果展示

在这里插入图片描述

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

一、SUSAN算法

   Susan边缘检测是一种经典的边缘检测算,它由Susan Smith于1990年提出。该算法主要用于在图像中检测边缘的位置和方向。

   Susan边缘检测算法的基本思想是通过计算像素点与其周围像素点的灰度差异来确定边缘的位置。具体步骤如下:
1、对于图像中的每个像素点,选择一个邻域窗口,通常是一个圆形或者正方形的窗口。
2、在邻域窗口内,计算每个像素点与窗口中心像素点的灰度差异。
3、根据灰度差异的阈值,判断像素点是否为边缘点。如果灰度差异超过阈值,则认为该像素点是边缘点。
4、对于被判定为边缘点的像素,可以进一步计算其边缘方向。
5、Susan边缘检测算法相比其他边缘检测算法具有以下特点:

   对噪声具有较好的鲁棒性,能够有效地抑制噪声对边缘检测的影响。可以检测到细线条和曲线等细节信息。算法简单,计算效率较高。

二、代码实现

#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;Mat SusanEdgeDetection(Mat& src, int threshold = 100, int radius = 3)
{Mat dst(src.size(), CV_8UC1, Scalar(0));for (int i = radius; i < src.rows - radius; i++){for (int j = radius; j < src.cols - radius; j++){int sum = 0;int count = 0;int center = src.at<uchar>(i, j);for (int k = -radius; k <= radius; k++){for (int l = -radius; l <= radius; l++){int val = src.at<uchar>(i + k, j + l);int diff = abs(val - center);if (diff <= threshold){sum += diff;count++;}}}float susan = 1 - count / (2.0 * radius + 1) / (2.0 * radius + 1);if (susan > 0.3){dst.at<uchar>(i, j) = 255;}}}return dst;
}int main()
{Mat src = imread("susan.png", IMREAD_GRAYSCALE);if (src.empty()){cout << "Could not open or find the image!\n" << endl;return -1;}Mat dst = SusanEdgeDetection(src);imshow("原始图像", src);imshow("SUSAN边缘检测", dst);waitKey(0);return 0;
}

三、结果展示

在这里插入图片描述

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

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

相关文章

【muduo源码学习】one-loop-per-thread核心原理

在 TCP 网络编程中&#xff0c;这里我们特指在单机的环境下&#xff0c;主要关注两件事。第一&#xff0c;如何正确的处理TCP的连接和断开&#xff0c;以及正确处理数据的收发&#xff1b;在错综复杂的网络环境中&#xff0c;这并非易事&#xff0c;涉及很多细节。第二&#xf…

【JAVA基础篇教学】第十七篇:Java单元测试

博主打算从0-1讲解下java基础教学&#xff0c;今天教学第十七篇&#xff1a;Java单元测试。 单元测试和集成测试是软件开发过程中至关重要的一部分&#xff0c;它们可以帮助确保代码的质量和稳定性。下面我将为您提供详细说明和代码案例。 一、单元测试&#xff08;Unit Test…

27、Lua 学习笔记之五(Lua中的数学库)

Lua中的数学库 Lua5.1中数学库的所有函数如下表&#xff1a; math.pi 为圆周率常量 3.14159265358979323846 数学库说明例子方法abs取绝对值math.abs(-15)15acos反余弦函数math.acos(0.5)1.04719755asin反正弦函数math.asin(0.5)0.52359877atan2x / y的反正切值math.atan2(9…

JAVA学习-并发.并发的定义

并发是指多个任务在同一时间段内执行。在计算机领域&#xff0c;特指多个线程或进程同时执行的情况。Java提供了多种并发编程的机制&#xff0c;包括线程、锁、信号量、并发集合等。下面将对Java并发编程的一些常见概念、特点以及使用方法进行概述&#xff0c;并与其他比较和高…

Optional类用法

简介 空指针异常是Java应用程序失败的最常见原因。Google公司在著名的Guava项目中引入了Optional类&#xff0c;通过使用检查空值的方式来防止代码污染&#xff0c;来解决臭名昭著的空指针异常问题。受此启发&#xff0c;Optional类已成为Java 8 类库的一部分。 使用 Optional类…

Leetcode 221. 最大正方形

心路历程&#xff1a; 这道题是一个动态规划题&#xff0c;但是其实递推关系很难想到&#xff0c;如下图所示&#xff1a; MDP建模&#xff1a; 状态&#xff1a;以i,j为右下角的正方形 动作候选集&#xff1a;这道题的动作候选集其实是是否选择其左上角邻接的三个位置&#x…

11.范式与反范式设计

范式 1.问题 MySQL的库表设计&#xff0c;在很多时候我们都是率性而为&#xff0c;往往在前期的设计中考虑不全面&#xff0c;同时对于库表结构的划分也并不明确&#xff0c;所以很多时候在开发过程中&#xff0c;代码敲着敲着会去重构某张表结构&#xff0c;甚至大面积重构多…

linux常用基本命令

# 文本与文本查找 ## 1.grep 常用参数&#xff1a; -A n --after-context显示匹配字符后n行 -B n --before-context显示匹配字符前n行 -C n --context 显示匹配字符前后n行 -c --count 计算符合样式的行数 -i 忽略大小写 -v反转 -a处理二进制文件 -l 只列出文件内容符…

深圳比创达电子EMC|EMC电磁兼容性:电子设备稳定运行的保障

随着科技的飞速发展&#xff0c;电子设备在人们的日常生活中发挥着越来越重要的作用。然而&#xff0c;随之而来的电磁干扰问题也日益突出。电磁兼容性&#xff08;EMC&#xff09;作为衡量电子设备在电磁环境中正常工作能力的关键指标&#xff0c;其重要性不言而喻。 一、EMC…

IP地址是随着网络变化的吗?

IP地址&#xff0c;即互联网协议地址&#xff0c;是分配给每个联网设备或网络接口的数字标签。它在网络通信中起着至关重要的作用&#xff0c;是设备之间互相识别和通信的基础。然而&#xff0c;关于IP地址是否随着网络变化&#xff0c;这是一个值得深入探讨的问题&#xff0c;…

每日新闻掌握【2024年4月16日 星期二】

2024年4月16日 星期二 农历三月初八 大公司/大事件 丁雄军&#xff1a;茅台集团2023年出口额超43亿元&#xff0c;占中国白酒出口额的77% 36氪获悉&#xff0c;据贵州茅台微信公众号消息&#xff0c;4月13日&#xff0c;茅台集团党委书记、董事长丁雄军出席全球消费创新系列活…

深度残差收缩网络中,使用 Sigmoid 函数的用意在哪?

在深度残差收缩网络中&#xff0c;使用 Sigmoid 函数将输出归一化到 0 和 1 之间的目的是为了限制输出值的范围&#xff0c;并且使得输出可以被解释为概率。这个 Sigmoid 函数的输出可以被看作是一个置信度或者概率的度量&#xff0c;表示某个事件发生的可能性。 在设置阈值时…

对外观模式的理解

目录 一、场景【[案例来源](https://kamacoder.com/problempage.php?pid1089)】1 题目描述2 输入描述3 输出描述4 输入示例5 输出示例 二、如果不采用外观模式1、实现2、问题 三、采用外观模式1、实现2、优点 四、个人思考 一、场景【案例来源】 1 题目描述 小明家的电源总开…

微信小程序的反编译

参考&#xff1a; 微信小程序的反编译_magic number is not correct!-CSDN博客 如何从在安卓Android手机获取微信小程序源代码 - 知乎 (zhihu.com) 资源&#xff1a; wechar.apk RE管理器.apk Node.js”安装包 反编译GIT&#xff1a;hs610/wxappUnpacker (github.com)

Linux没有显示IP地址,报错mtu 1500 qdisc noop state DOWN group default qlen 1000

问题 复制虚拟机后, 打开,发现没有IP地址. ip addr 1:1o:<LOOPBACK,UP,LOWER_UP>mtu 65536 gdisc noqueue state UNKNOWN group default glen 1000 1ink/1 popback88:80:80:88:88:80brd00:0g:80:80:80:80 inet 127.0.0.1/8 scope host lo valid_lft forever preferre…

详解playwright 官方Javascript demo(适合小白)

如果大家刚上手playwright&#xff0c;并看到了Javascript脚本的官方demo&#xff0c;代码如下&#xff1a; const { webkit } require(playwright);(async () > {const browser await webkit.launch();const page await browser.newPage();await page.goto(http://what…

开放式耳机怎么选?五大市场热卖爆款推荐!

近年来&#xff0c;开放式耳机风潮席卷市场&#xff0c;各大知名品牌纷纷推出新品&#xff0c;以满足消费者的需求。相较于传统的入耳式耳机&#xff0c;开放式耳机凭借其独特的佩戴方式&#xff0c;受到了广大消费者的热烈追捧。它不仅有效避免了长时间佩戴带来的耳道不透气、…

【数据结构】栈的实现

&#x1f451;个人主页&#xff1a;啊Q闻 &#x1f387;收录专栏&#xff1a;《数据结构》 &#x1f389;前路漫漫亦灿灿 前言 栈是一种特殊的线性表&#xff0c;我们在有了顺序表和链表的知识的基础上&#xff0c;再来学习栈&#xff0c;掌握起来就更轻松了…

所有可能的真二叉树(Lc894)——记忆化搜索

给你一个整数 n &#xff0c;请你找出所有可能含 n 个节点的 真二叉树 &#xff0c;并以列表形式返回。答案中每棵树的每个节点都必须符合 Node.val 0 。 答案的每个元素都是一棵真二叉树的根节点。你可以按 任意顺序 返回最终的真二叉树列表。 真二叉树 是一类二叉树&#…

【24年物联网华为杯】赛题分析与初步计划

赛事介绍 官网链接&#xff1a;2024 年全国大学生物联网设计竞赛 (sjtu.edu.cn) 含金量&#xff1a;属于A类赛事 &#xff08;注意&#xff1a;很多搜索结果的序号是按照选入时间排列的&#xff0c;与含金量无关&#xff0c;华为杯是23年选入的&#xff09; Kimi Chat: 全国…