sobel算子_OpenCV 学习:4 Sobel算子
1 背景介绍
图像底层的处理对象,比如图像的噪点、边缘、直线、圆、特征点等为目的。那么本章主要解决的问题是如何提取图形中的边缘?是我们关心中的重点。那么,其数学原理是一阶离散差分的形式。故我们知道把一个图像处理转变为灰度图像,就是处理这张图像的每个像素灰度的变化,那么在边缘处,灰度变化比较明显(对应着其梯度或者灰度矢量的变化)。
2 Sobel算子的形式
- 图像处理绝大数在卷积操作,Opencv 会提供一个
或者或者其他大小的 kernel,也就是卷积核。对于卷积核操作,首先我们要明白卷积原理。
卷积公式:
我擦,看到他的定义瞬间懵掉了。那么他到底解释的什么?我给出引用其他小伙伴的卷积解释卷积到底是什么?我还是一脸雾水,当我看到以下证明时,我才完全明白其来源和含义:
设二维连续型随机变量
那么:
则:
其实,卷积函数就是二阶积分一种特殊情况的一元积分形式。
- Sobel 卷积算子,
轴方向的变化和轴方向的变化
看到
若
那么在
具体计算方式如下:
其中
那么,改点的灰度梯度为:
如果梯度
Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当对精度要求不是很高时,是一种较为常用的边缘检测方法。
3 API 函数介绍
void cv::Sobel( InputArray _src, OutputArray _dst, int ddepth, int dx, int dy,int ksize, double scale, double delta, int borderType )第一个参数:_src 输入的源影像 第二个参数:_dst输出的目标影像,大小和通道数与源影像相同。深度由ddepth来决定第三个参数:目标影像的深度;当源源影像的深度为CV_8U时,一般ddepth选择为CV_16S第四个参数:x方向上的导数因子第五个参数:Y方向上的导数因子第六个参数:如果ksize<0的时候,那么使用scharr内核过滤因子。scharr的内核过滤因子大小为3。dx大于等于0,dy大于等于0,并且dx+dy==1
#include <opencv2/core/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>using namespace cv;
using namespace std;int main(int argc, char **argv)
{Mat image = imread("/Users/cc/Desktop/OpenCV/demo/MyOpenCvDemo/MyDemo/swk.jpeg");if (image.empty()){cout << "could not find the image resource ..." << endl;return -1;}Mat grayImg;cvtColor(image, grayImg, COLOR_BGR2GRAY);Mat sobelx;Sobel(grayImg, sobelx, CV_32F, 1, 0);double minVal, maxVal;minMaxLoc(sobelx, &minVal, &maxVal);Mat draw;sobelx.convertTo(draw, CV_8U, 255.0 / (maxVal - minVal), -minVal * 255.0 / (maxVal - minVal));namedWindow("My Image", CV_WINDOW_AUTOSIZE);imshow("My Image", draw);waitKey(0);return 0;
}
4 运行结果
sobel算子_OpenCV 学习:4 Sobel算子相关推荐
- sobel算子_OpenCV图像处理专栏十八 | 手动构造Sobel算子完成边缘检测
1. 前言 众所周知,在传统的图像边缘检测算法中,最常用的一种算法是利用Sobel算子完成的.Sobel算子一共有 个,一个是检测水平边缘的算子,另一个是检测垂直边缘的算子. 2. Sobel算子优缺 ...
- OpenCV3学习(6.1)——边缘检测---Canny,Sobel,Prewitt,Robert,Laplace,LOG,DOG算子
图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波.我们知道微分运算是求信号的变化率,具有加强高频分量的作用.在空域运算中来说,对图像的锐化就是计算微分.由于数字图像的离散信号, ...
- OpenCV Sobel检测算子和Scharr检测算子
Sobel边缘检测算法比较简单,实际应用中效率比canny边缘检测效率要高,但是边缘不如Canny检测的准确,但是很多实际应用的场合,sobel边缘却是首选,Sobel算子是高斯平滑与微分操作的结合体 ...
- java求sobel算子代码_边缘检测sobel算子
#1,个人理解 网上查了很多资料,都说sobel算子是用来检测边缘的,分别给了两个方向上的卷积核,然后说明做法,就说这就是sobel算子.对于我个人来说,还有很多不明白的地方,所以理清下思路. #2, ...
- opencv学习日志18-canny算子
前言 这篇文章主要讲述opencv中canny算子的使用. 一.canny算子 //第一题 调用canny算子 #include <opencv2/opencv.hpp> #include ...
- CANN训练营第三季_昇腾CANN算子精讲课_TBE算子Sinh开发笔记_算子开发(二)
1.作业算子要求 2.检查版本对应关系 在Mindstudio软件包下载界面可以检查安装的mindstudio版本和cann版本是否一致,如果不一致可能会导致后面算子工程创建出错. 这里我用的Mind ...
- 应用sobel算子算法c语言,Sobel算子详解
1 .卷积应用-图像边缘提取 Sobel 算子是一个离散微分算子 (discrete differentiation operator). 它结合了高斯平滑和微分求导,用来计算图像灰度函数的近似梯度. ...
- sobel算子 matlab实现6,Sobel算子matlab实现
算子实际上是用来对图像进行卷积处理,其本质是用变分法来处理梯度问题,用途就是边缘检测.45度和135度效果一般,水平检测加垂直检测效果还可以. function Sobel(name,Threshol ...
- sobel算子 matlab实现6,sobel算子,matlab实现
A=imread('D:\image\Body.jpg'); I = rgb2gray(A); subplot(2,2,1); imshow(I); title('原图'); hx=[-1 -2 -1 ...
最新文章
- SSL 数字证书助力电子商务,让您网络购物更安心
- avue form提交变为不可编辑_教程42——富文本编辑器的原理(项目)
- Android新控件RecyclerView浅析及上拉和下拉刷新
- python 布尔值为f我的_python – 为什么我没有得到布尔值?
- itextsharp php,C#_C#使用iTextSharp设置PDF所有页面背景图功能实例,本文实例讲述了C#使用iTextSharp - phpStudy...
- 禁用FCKeditor浏览服务器
- HDU 4812 D Tree (点分治) (2013ACM/ICPC亚洲区南京站现场赛)
- Kotlin静态方法定义和调用
- rstudio安装后打不开_R与RStudio最简单安装指南
- Java垃圾回收器的工作原理
- Java并发和多线程3:线程调度和有条件取消调度
- Unity 使物体朝向某个方位
- 【RLchina第六讲】Imitation Learning
- Spark中使用Dataset的groupBy/agg/join/broadcast hasjoin/sql broadcast hashjoin示例(java api)
- delphi连接mysql不用添加dsn_Delphi]delphi中动态创建MySQL的ODBC连接 .
- C语言自学之路一(初识C语言)
- LOAP引擎:clickhouse03:文件的导入导出方式
- 张正友相机标定法原理与实现
- 陈龙杰计算机专业,第四届学生职业技能大赛获奖名单
- UT单元测试总结基础篇
热门文章
- python定义匿名函数关键字_python语言的匿名函数、7种可调用对象以及用户定义的可调用类型...
- Effective Java之列表由于数组(二十五)
- Raft算法的Leader选举和日志复制过程
- Megastore:为交互式服务提供可扩展的高可用性存储
- 07.德国博士练习_09_agg_query
- vi 搜索命令_vi或vim如何查询关键字
- Windows下安装苹果iPhone开发环境xcode图文教程
- linux中的vsprintf_Git29 年超 100 万次 commit,Linux 内核何以发展至今?
- 测试硬盘读写速度软件_机械硬盘回春:2023年容量破40TB 读写速度媲美SATA SSD
- java i=(int)b_定义类B和类C如下,并将其保存为B.java文件,得到的结果是()class B{int b;B(int i){b=i;}}class C extend...