2.7 Sobel导数
OpenCV函数
Sobel(src_gray,grad_x/grad_y,ddepth,x_order,y_order,scale,delta,BORDER_DEFAULT )
Scharr( )
边缘检测
为何要求导,如下图:

假设需要检测图中的边缘,可以看到在边缘像素值显著改变,灰度值跃升

利用一阶导数可以清晰喊道跃升(高峰值)

从以上推论,检测边缘可以通过定位梯度值大于邻域的像素的方法找到(或者推广到大于一个阈值)
Sobel算子
Sobel算子是一个邻域微分算子(discrete differentiation operator)。它用来计算图像灰度函数的近似梯度。
Sobel算子结合了高斯平滑和微分求导。
计算
假设源图像为I
在两个方向求导
水平变化:将I与一个奇数内核Gx进行卷积。比如,当内核大小为3时,Gx的计算结果为:

垂直变化:将I与一个奇数大小的内核Gy进行卷积:

在图像的每一点,结合以上两个结果求出近似梯度。
当内核大小为3时,Sobel内核可能产生比较明显的误差(毕竟Sobel算子只求取了倒数的近似值),为解决这一个问题,
OpenCV提供了另一个Scharr函数,该函数仅作用于大小为3的内核。该函数的运算与Sobel函数一样快,但结果更精确。
其内核为:
#include <opencv2/opencv.hpp>
#include <iostream>
#include<windows.h>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
using namespace cv; int main() {
Mat src, src_gray;
Mat grad;
char* window_name =(char*)"Sobel Demo-Simple Edge Detector";
int scale = ;
int delta = ;
int ddepth = CV_16S;
int c; //装载图像
src = imread("D:\\Pic\\4141.jpg");
if (!src.data) {
return -;
}
GaussianBlur(src, src, Size(, ), , , BORDER_DEFAULT); //转为灰度图
cvtColor(src, src_gray, CV_RGB2GRAY); //创建显示窗口
Mat grad_x, grad_y;
Mat abs_grad_x, abs_grad_y; //求x方向梯度
Sobel(src_gray, grad_x, ddepth, , , , scale, delta, BORDER_DEFAULT);
convertScaleAbs(grad_x, abs_grad_x); //求y方向梯度
Sobel(src_gray, grad_y, ddepth, , , , scale, delta, BORDER_DEFAULT);
convertScaleAbs(grad_y, abs_grad_y); //合并梯度
addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, , grad); imshow(window_name, grad);
waitKey(); return ;
}
2.7 Sobel导数的更多相关文章
- Sobel导数
Sobel 导数 目标 本文档尝试解答如下问题: 如何使用OpenCV函数 Sobel 对图像求导. 如何使用OpenCV函数 Scharr 更准确地计算 核的导数. 原理 Note 以下内容来自于 ...
- OpenCV Sobel 导数
#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #i ...
- opencv-学习笔记(6)图像梯度Sobel以及canny边缘检测
opencv-学习笔记(6)图像梯度Sobel以及canny边缘检测 这章讲了 sobel算子 scharr算子 Laplacion拉普拉斯算子 图像深度问题 Canny检测 图像梯度 sobel算子 ...
- 2.opencv图像处理常用操作
图像的平滑处理 平滑,也称 模糊, 平滑处理时需要用到一个滤波器 .滤波器想象成一个包含加权系数的窗口,这个加权系数也叫做核或者模版. // 图像平滑处理分而学之.cpp : 定义控制台应用程序的入口 ...
- 【OpenCV新手教程第14】OpenCVHough变换:霍夫变换线,霍夫变换圆汇编
本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/26977557 作者:毛星云(浅墨) ...
- SciPy模块应用
1.图像模糊 图像的高斯模糊是非常经典的图像卷积例子.本质上,图像模糊就是将(灰度)图像I 和一个高斯核进行卷积操作:,其中是标准差为σ的二维高斯核.高斯模糊通常是其他图像处理操作的一部分,比如图像 ...
- [OpenCV-Python] OpenCV 中的图像处理 部分 IV (二)
部分 IVOpenCV 中的图像处理 OpenCV-Python 中文教程(搬运)目录 16 图像平滑 目标 • 学习使用不同的低通滤波器对图像进行模糊 • 使用自定义的滤波器对图像进行卷积(2D 卷 ...
- [OpenCV-Python] OpenCV 中机器学习 部分 VIII
部分 VIII机器学习 OpenCV-Python 中文教程(搬运)目录 46 K 近邻(k-Nearest Neighbour ) 46.1 理解 K 近邻目标 • 本节我们要理解 k 近邻(kNN ...
- OpenCV常用库函数[典]
一.core 模块 1.Mat - 基本图像容器 Mat 是一个类,由两个数据部分组成:矩阵头(包含矩阵尺寸,存储方法,存储地址等信息)和一个指向存储所有像素值的矩阵(根据所选存储方法的不同矩阵可以是 ...
随机推荐
- stable
stable - 必应词典 美['steɪb(ə)l]英['steɪb(ə)l] n.马厩:马房:(养马作特定用途的)养马场 adj.稳定的:稳固的:牢固的:稳重的 v.使(马)入厩:把(马)拴在马厩 ...
- python指针
class ListNode: def __init__(self, x): self.val = x self.next = None就两个属性 value 和 next,因为单节点默认next是没 ...
- RockerMQ介绍 及搭建双master模式
一.RocketMQ介绍 1.1 简介 RocketMQ 是一款分布式.队列模型的消息中间件,具有以下特点: 能够保证严格的消息顺序 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅机 ...
- delete[] p与 delete p
基本类型的对象没有析构函数,所以回收基本类型组成的数组空间用 delete 和 delete[] 都是应该可以的:但是对于类对象数组,只能用 delete[].对于 new 的单个对象,只能用 del ...
- call指令
CPU执行call指令时,进行两步操作: 将当前的IP或CS和IP压入栈中; 转移. call指令不能实现短转移,除此之外,call指令实现转移的方法和jmp指令的原理相同. 1)依据位移进行转移的c ...
- go流程控制与函数
package main; import ( "fmt" ); func main() { isRun := true; //条件判断 if isRun { fmt.Printf( ...
- 15.Mysql中的安全问题
15.SQL中的安全问题15.1 SQL注入简介SQL是用来和数据库交互的文本语言.SQL注入(SQL Injection)是利用数据库的外部接口将用户数据插入到实际的SQL中,以达到入侵数据库乃至操 ...
- sql建立一种,自定义的执行作业
USE [chongwu] GO /****** Object: StoredProcedure [dbo].[p_createjob] Script Date: 01/21/2016 14:32:0 ...
- Android——Activity练习
manifests里的AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> < ...
- Next generation sequencing (NGS)二代测序数据预处理与分析
二代测序原理: 1.DNA待测文库构建. 超声波把DNA打断成小片段,一般200--500bp,两端加上不同的接头2.Flowcell.一个flowcell,8个channel,很多接头3.桥式PCR ...