首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

OpenCV 边缘检测

OpenCV 边缘检测

Canny算子

Canny 边缘检测算子,其算法步骤大体如下:

1) 用高斯滤波器对输入图像做平滑处理 (大小为 的高斯核)

2) 计算图像的梯度强度和角度方向 ( 和 方向上的卷积核)

角度方向近似为四个可能值,即 0, 45, 90, 135

3) 对图像的梯度强度进行非极大抑制

可看做边缘细化:只有候选边缘点被保留,其余的点被移除

4) 利用双阈值检测和连接边缘

若候选边缘点大于上阈值,则被保留;小于下阈值,则被舍弃;处于二者之间,须视其所连接的像素点,大于上阈值则被保留,反之舍弃

OpenCV 中, 函数如下:

一般上阈值 / 下阈值= 2 ~ 3

默认 ,表示图像梯度强度的计算采用近似形式;若为 ,则表示采用更精确的形式。

Sobel算子

假定输入图像矩阵为 ,卷积核大小为 ,则水平一阶导数 和垂直一阶导数 分别为:

输出的图像矩阵 为:

OpenCV 中,Sobel 函数如下:

和 表示阶数,一般取 0 或 1,但不超过 2; = 1,表示计算结果不缩放; = 0,表示计算结果无增量。

Laplace算子

索贝尔算子 (Sobel) 和拉普拉斯算子 (Laplace) 都是用来对图像进行边缘检测的,不同之处在于,前者是求一阶导,后者是求二阶导

OpenCV 中对应的函数为 Laplacian

Scharr算子

当卷积核大小为 时,使用 卷积核来计算并不是很精确,此时常用 卷积核来代替,如下:

而 函数,本质上就是令 且使用 卷积核的 函数。

对于 函数,要求 和 都 >= 0 且 ,假如 和 都设为 1,则会抛出异常。

因此,对于 和 函数,通常各自求其 和 方向的导数,然后通过加权来进行边缘检测。

参考代码

参考

[OpenCV 之 边缘检测]https://www.cnblogs.com/xinxue/p/5348743.html

[OpenCV3编程入门读书笔记5-边缘检测]https://www.cnblogs.com/justkong/p/7297836.html

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180523G0OO9R00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券