卷积边缘:

一、在进行卷积的时候,对于原图像(1,1)的位置,左、上方没有足够的像素做卷积。

二、通常,在卷积之前,在原图增加边缘像素,比如(3*3的,增加一个像素)

三、增加像素值得处理方法,通常有:

(一)BORDER_DEFAULT。默认

(二)BORDER_CONSTANT。使用固定的值。

(三)BORDER_REPLICATE。使用已知边缘的像素值。

(四)BORDER_WRAP。用另一边的像素值来补偿填充。

四、API

copyMakeBorder(
Mat src,
Mat dst,
int top,//边缘宽度,一般上下左右都一样
int bottom,
int left,
int right,
int borderType,//类型
Scalar value //颜色限制
)

五、例子

原图

BORDER_DEFAULT

BORDER_REPLICATE

BORDER_WRAP


 Canny边缘检测

一、算法介绍

(一)高斯模糊——GaussianBlur。就是对图像进行降噪。

(二)灰度转换——cvtColor。

(三)计算梯度——Sobel/Scharr。得到   |X| + |Y|。

(四)非最大信号抑制。由于Sobel后,边沿非常强(粗),甚至起“皱褶”。因此要处理。

(五)高低阈值输出二值图像。

二、详细介绍

(一)梯度。Sobel

Gx:将kernel内,水平方向的所有变化量,全部集中在【锚点】处,而且【锚点】同行,还*2,突出其权重。

G如果大于某个阈值,那么此位置就可能是边缘了。

G通常用G = |Gx| +|Gy|

(二)非最大信号抑制

  1、梯度方向。在哪个方向变化最大。

  

  θ在0~180度之间

  2、抑制。

    (1)找到θ

    (2)比如θ=90度,找到90±45度的像素(左上、右上)

    (3)如果像素值,大于左上、右上,那么保留。否则舍弃。

(三)高低阈值输出二值图像。

  1、定义2个阈值:高值T1、低值T2。

  2、大于T1,保留;小于T2,丢弃。

  3、从高于T1的像素开始寻找,大于T2且相互链接的,都保留。

  4、推荐T1:T2 = 3:1,或者2:1。

三、API介绍

Canny(
Mat src, //8-bit(位)的灰度图
Mat dst,
double T2, //低阈值,此值越高,得到的边缘越少,最终只留最强的边缘
double T1, //高阈值,通常为255
int aptertureSize,//Soble算子的Size,通常3*3的,所以这里填3
bool L2gradient //true表示是L2来归一化,否则用L1归一化,一般为false
) //L2gradient ,使用L2,则用G = sqrt(gx*gx + gy* gy)来求梯度,否则用
//G = |gx| + |gy|来近似

四、例子

Mat gaussianBlur, gray, canny;
cvtColor(src, gray, COLOR_BGR2GRAY);
Canny(gray, canny, 85, 255, 3);
imshow("canny", canny);

随着低阈值的变化,而变化

OpenCv:边缘处理&Canny边缘检测的更多相关文章

  1. openCV实例:Canny边缘检测

    http://blog.sina.com.cn/s/blog_737adf530100z0jk.html 在第一次使用openCV程序成功对图像进行打开后,现在开始试验第二个例程试验:Canny边缘检 ...

  2. opencv——自适应阈值Canny边缘检测

    前言 Canny边缘检测速度很快,OpenCV中经常会用到Canny边缘检测,以前的Demo中使用Canny边缘检测都是自己手动修改高低阈值参数,最近正好要研究点小东西时,就想能不能做个自适应的阈值, ...

  3. OpenCV: Canny边缘检测算法原理及其VC实现详解(转载)

    原文地址:http://blog.csdn.net/likezhaobin/article/details/6892176 原文地址:http://blog.csdn.net/likezhaobin/ ...

  4. [转载+原创]Emgu CV on C# (六) —— Emgu CV on Canny边缘检测

    Canny边缘检测也是一种边缘检测方法,本文介绍了Canny边缘检测的函数及其使用方法,并利用emgucv方法将轮廓检测解算的结果与原文进行比较. 图像的边缘检测的原理是检测出图像中所有灰度值变化较大 ...

  5. Canny边缘检测算法原理及其VC实现详解(二)

    转自:http://blog.csdn.net/likezhaobin/article/details/6892629 3.  Canny算法的实现流程 由于本文主要目的在于学习和实现算法,而对于图像 ...

  6. openc —— Canny 边缘检测

    边缘检测的一般步骤 [第一步]滤波 边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪声很敏感,因此必须采用滤波器来改善与噪声有关的边缘检测器的性能.常见的滤波方法主要有高斯滤波,即采用 ...

  7. 机器学习进阶-边缘检测-Canny边缘检测 1.cv2.Canny(进行Canny边缘检测)

    1. cv2.Canny(src, thresh1, thresh2) 进行canny边缘检测 参数说明: src表示输入的图片, thresh1表示最小阈值,thresh2表示最大阈值,用于进一步删 ...

  8. OpenCV图像Canny边缘检测

    Canny边缘检测 图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘函数原型:     void cvCanny(       ...

  9. openCV(四)---Canny边缘检测

    图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘. 直接上代码,函数简介都在代码注释中 //canny边缘检测 -(void) ...

  10. 基于opencv下对视频的灰度变换,高斯滤波,canny边缘检测处理,同窗体显示并保存

    如题:使用opencv打开摄像头或视频文件,实时显示原始视频,将视频每一帧依次做灰度转换.高斯滤波.canny边缘检测处理(原始视频和这3个中间步骤处理结果分别在一个窗口显示),最后将边缘检测结果保存 ...

随机推荐

  1. pyinstaller打包Python程序报错OSError: Python library not found: libpython3.8.so, libpython3.8m.so

    重新编译python(不影响原来安装的库文件),加入--enable-shared ./configure --prefix=/usr/local/python3 --enable-shared然后m ...

  2. Redis一主多从哨兵模式

    首先配置一主多从示例如下: 1.两台主机IP地址如下: 主: 192.168.3.81 端口:6379 从:192.168.3.82  端口:6379 从:192.168.3.82  端口:6380 ...

  3. Linux常用的性能分析

    参考文档:https://www.runoob.com/w3cnote/linux-common-command-2.html 一.ps -aux ps -aux ps -ef -a:所有进程. -u ...

  4. OpenGL错误记录

    OpenGL3之--三角形(无法解析的外部符号 __imp__glClear@4,该符号在函数 _main 中被引用) 添加头文件 #include <GL/glut.h>

  5. Vue 权限控制 使用自定义指令 代替v-if

    参考了vue-element-admin 指令库的permission 使用Demo(demo.vue) <template> <p>admin组:<span v-per ...

  6. SVN 之切换账号

    简单来说两步就搞定了 第一步删除已缓存的数据 第二步输入要切换账号密码 具体步骤图解如下: 第一步: 点击TortoiseSVN 找到设置  点击已保存数据 点击清除全部 再点击确定 第二步: 点击s ...

  7. 每次 git 都需要输入用户名和密码的解决办法

    git config --global credential.helper store git pull /git push (第一次输入,下次就不用再次输入数据)

  8. 四、流程控制、break、continue、return

    一. 程序流程控制概述 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块. 流程控制方式采用结构化程序设计中规定的只有三种基本流程结构,即:1.顺序结构程序 ...

  9. Kubernetes 设置master相关

    设置master调度命令 1.设置master一般情况下不接受pod调度 sudo kubectl taint nodes master node-role.kubernetes.io/master= ...

  10. React函数式组件值之useRef()和useImperativeHandle()

    一.useRef useRef共有两种用法,获取子组件的实例(只有类组件可用),在函数组件中的一个全局变量,不会因为重复 render 重复申明, 类似于类组件的 this.xxx. 1. useRe ...