OpenCV-图像处理(17、Sobel算子)
卷积应用-图像边缘提取
卷积应用-图像边缘提取
- 边缘是什么 – 是像素值发生跃迁的地方,是图像的显著特征之一,在图像特征提取、对象检测、模式识别等方面都有重要的作用。
- 如何捕捉/提取边缘 – 对图像求它的一阶导数
delta = f(x) – f(x-1), delta越大,说明像素在X方向变化越大,边缘信号越强, - 我已经忘记啦,不要担心,用Sobel算子就好!卷积操作!
Sobel算子
是离散微分算子(discrete differentiation operator),用来计算图像灰度的近似梯度
Soble算子功能集合高斯平滑和微分求导
又被称为一阶微分算子,求导算子,在水平和垂直两个方向上求导,得到图像X方法与Y方向梯度图像
求取导数的近似值,kernel=3时不是很准确,OpenCV使用改进版本 Scharr 函数,算子如下:
API说明cv::Sobel
cv::Sobel (
InputArray Src // 输入图像
OutputArray dst// 输出图像,大小与输入图像一致
int depth // 输出图像深度.
Int dx. // X方向,几阶导数
int dy // Y方向,几阶导数.
int ksize, SOBEL算子kernel大小,必须是1、3、5、7、… …
double scale = 1
double delta = 0
int borderType = BORDER_DEFAULT
)
API说明cv::Scharr
cv::Scharr (
InputArray Src // 输入图像
OutputArray dst// 输出图像,大小与输入图像一致
int depth // 输出图像深度.
Int dx. // X方向,几阶导数
int dy // Y方向,几阶导数.
double scale = 1
double delta = 0
int borderType = BORDER_DEFAULT
)
其它API
- GaussianBlur( src, dst, Size(3,3), 0, 0, BORDER_DEFAULT );
- cvtColor( src, gray, COLOR_RGB2GRAY );
- addWeighted( A, 0.5,B, 0.5, 0, AB);
- convertScaleAbs(A, B)// 计算图像A的像素绝对值,输出到图像B
处理流程
- 高斯模糊 – 去噪声GaussianBlur()
- 转换为灰度图像cvtColor()
- Sobel /Scharr – 一阶导数计算Sobel ()、Scharr ()
- 取绝对值convertScaleAbs()
- 图像按权值合成addWeighted()
- 显示结果
代码示例
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;Mat src, src_gray;
const char* window_name1 = "Sobel Demo - Simple Edge Detector";
const char* window_name2 = "Scharr Demo - Simple Edge Detector";void Sobel_Demo();
void Scharr_Demo();int main( int, char** argv )
{// 1.加载源图像srcsrc = imread("E:/Experiment/OpenCV/Pictures/girl.jpg");if( src.empty()){ //检测图片printf("could not load image...");return -1;}namedWindow( window_name1, WINDOW_AUTOSIZE );namedWindow( window_name2, WINDOW_AUTOSIZE );namedWindow("input",CV_WINDOW_AUTOSIZE);imshow("input",src);//输出图像// 2. 先模糊,为了去噪声。将cv :: GaussianBlur应用于我们的图像以减少噪音(内核大小= 3)GaussianBlur( src, src, Size(3,3), 0, 0, BORDER_DEFAULT );// 3. 将滤波后的图像转换为灰度图像:cvtColor( src, src_gray, COLOR_RGB2GRAY );// 4.分别用 Sobel 算子和 Scharr 算子进行图像边缘化处理Sobel_Demo();Scharr_Demo();waitKey(0);return 0;
}
void Sobel_Demo(){// 4.1. 计算x和y方向的导数。 为此,我们使用函数cv :: SobelMat sobelX, sobelY;int scale = 1;int delta = 0;int ddepth = CV_16S; // 输出图像使用 CV_16S 相比输出深度为原图的 CV_8U ,输出的图像梯度更明显Sobel( src_gray, sobelX, ddepth, 1, 0, 3, scale, delta, BORDER_DEFAULT ); //Sobel X 方向求导,求梯度,输出的图像是二值图Sobel( src_gray, sobelY, ddepth, 0, 1, 3, scale, delta, BORDER_DEFAULT ); //Sobel Y 方向求导,求梯度// 4.2. 将部分结果转换回CV_8U:Mat abs_sobelX, abs_sobelY;convertScaleAbs( sobelX, abs_sobelX );//convertScaleAbs函数将颜色数据取绝对值,否则图像可能无法显示convertScaleAbs( sobelY, abs_sobelY );imshow("SobelX",abs_sobelX);imshow("SobelY",abs_sobelY);// 4.3. 通过添加两个方向渐变来近似渐变Mat dst;addWeighted( abs_sobelX, 0.5, abs_sobelY, 0.5, 0, dst );//振幅图像,图像合成// 4.4. 输出结果imshow( window_name1, dst );}void Scharr_Demo(){//Scharr 将梯度更加的放大,相比于 sobel ,非常的不怕干扰// 4.1. 计算x和y方向的导数。 为此,我们使用函数cv :: SobelMat scharrX, scharrY;int scale = 1;int delta = 0;int ddepth = CV_16S; // 输出图像使用 CV_16S 相比输出深度为原图的 CV_8U ,输出的图像梯度更明显Scharr( src_gray, scharrX, ddepth, 1, 0, scale, delta, BORDER_DEFAULT );Scharr( src_gray, scharrY, ddepth, 0, 1, scale, delta, BORDER_DEFAULT );// 4.2. 将部分结果转换回CV_8U:Mat abs_scharrX, abs_scharrY;convertScaleAbs( scharrX, abs_scharrX );//convertScaleAbs函数将颜色数据取绝对值,否则图像可能无法显示convertScaleAbs( scharrY, abs_scharrY );imshow("ScharrX",abs_scharrX);imshow("ScharrY",abs_scharrY);// 4.3. 通过添加两个方向渐变来近似渐变Mat dst;addWeighted( abs_scharrX, 0.5, abs_scharrY, 0.5, 0, dst );//振幅图像,图像合成// 4.4. 输出结果imshow( window_name2, dst );
}
运行截图
- 原图
- Sobel 算子
- Scharr 算子
参考博客:
- https://blog.csdn.net/LYKymy/article/details/83184469
- https://blog.csdn.net/huanghuangjin/article/details/81138129
OpenCV-图像处理(17、Sobel算子)相关推荐
- OpenCV中的Sobel算子
OpenCV中的Sobel算子 刚开始第一次接触这个东西的时候也是感觉一脸懵逼,这是什么鬼.完全看不懂.今天再次接触到,感觉理解的透彻了一点. 首先来看一下Sobel算子是个什么东西: -1 0 1 ...
- OpenCV 边缘检测之Sobel算子
文章目录 Sobel算子(索贝尔算子) Sobel算子定义: Sobel算子作用: Sobel卷积因子 Sobel卷积计算公式: 相关API Sobel() convertScaleAbs() add ...
- 计算机视觉开源库OpenCV梯度之Sobel算子
Sobel算子是像素图像边缘检测中最重要的算子之一,在机器学习.数字媒体.计算机视觉等信息科技领域起着举足轻重的作用.在技术上,它是一个离散的一阶差分算子,用来计算图像亮度函数的一阶梯度之近似值.在图 ...
- OpenCV图像处理使用笔记(八)——Sobel算子
前言 前面博客讲了矩阵之间的卷积操作,在图像处理中,使用一些标准的模板的卷积核与原图像进行运算,可以改变像素强度,从而影响周围其他像素的强度,常用于图像模糊.锐化及边缘检测等. Sobel算子 1.S ...
- OpenCV图像处理视频教程——入门篇(二)
文章目录 10 膨胀与腐蚀 (1)形态学操作(morphology operators)--膨胀.腐蚀 (2)相关API (3)动态调整结构元素大小TrackBar 11 形态学操作 (1)开操作- ...
- C++实现sobel算子
上一篇自动对焦里文章里用的评价函数,有用到opencv里的sobel算子. 我这边用C++实现下opencv里的这个算子 sobel算子的两个内核分别是{-1,0,1:-2,0,2:-1,0,1} ...
- [图像处理] Python+OpenCV实现车牌区域识别及Sobel算子
由于最近太忙,这篇文章只给出相关代码供大家学习,过一段时间会详细的写一些列Python图像处理的文章,包括各种算法原理.图像识别.图像增强.图像分类.深度学习等.本篇文章主要调用OpenCV库(cv2 ...
- 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波17 - 锐化高通滤波器 - 梯度图像(罗伯特,Sobel算子)
目录 锐化(高通)空间滤波器 使用一阶导数锐化图像-梯度 锐化(高通)空间滤波器 平滑通过称为低通滤波 类似于积分运算 锐化通常称为高通滤波 微分运算 高过(负责细节的)高频,衰减或抑制低频 使用一阶 ...
- 【OpenCV 例程200篇】64. 图像锐化——Sobel 算子
[OpenCV 例程200篇]64. 图像锐化--Sobel 算子 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 3 ...
- 【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/25560901 作者:毛星云(浅墨) ...
最新文章
- c语言坐标输出图片,tc 如何在指定坐标处 输出bmp图片??
- 一些我工作中经常使用的C4C ABSL代码片段
- k8s pod内部容器_第三章 pod:运行于kubernetes中的容器
- C#LeetCode刷题之#680-验证回文字符串 Ⅱ​​​​​​​(Valid Palindrome II)
- 8g内存够吗 rust_618已过半,这些白菜价内存你买到了吗?最便宜的8G不到120元
- 思科简单教程CCNA
- 二分排序法(折半排序)
- 训练集与测试集分布差距
- Jenkins linux 操作系统一键部署多节点
- 计算机视觉、模式识别、人工智能
- 【手写源码-设计模式9】-装饰器模式-基于王者荣耀英雄-甄姬皮肤场景
- HTML5--2 HTML标签
- Ubuntu清空回收站提示权限不够的解决办法
- **Mybatis怎么自动生成Mapper文件和实体类**
- 机智云自助开发平台,低代码快速开发新系统
- 啃K8s之快速入门,以及哭吧S(k8s)单节点部署
- 【linux】ubuntu系统硬盘操作:创建删除磁盘分区,更改磁盘分区类型,删除磁盘签名
- iOS/iPadOS中Office中文字体显示不正确的解决方法
- Nodejs 正则表达式
- 苹果移动设备密码破解
热门文章
- Xml中SelectSingleNode方法,xpath查找某节点用法
- python进程之间修改数据[Manager]与进程池[Pool]
- *(volatile unsigned long *) 语法
- 北大等多所高校网站被挂马 高考生浏览需小心
- 实用网站、软件、App分享
- java switch程序_Java 基础分支语句之程序流程控制switch-case
- 自媒体各大平台收益对比_自媒体推广平台都有哪些?
- ironpython怎么编译_将IronPython WPF项目编译为
- 3dmax 渲染关机 脚本_3DMax渲染完自动关机设置
- 【转】C# DateTime.Now详细用法