编程学习
🖼️C++OpenCV(14):图像边缘检测
00 分钟
2023-8-28
2023-11-23
type
status
date
slug
summary
tags
category
icon
password
Email
💡
水寒江静,满目青山,载月明归。——黄庭坚《诉衷情》
🔆
文章首发于我的个人博客:欢迎大佬们来逛逛

opencv图像边缘检测

边缘是指图像局部强度变化最显著的部分。主要存在于目标与目标、目标与背景、区域与区域(包括不同色彩)之间,是图像分割、纹理特征和形状特征等图像分析的重要基础。图像强度的显著变化可分为:
  • 阶跃变化函数,即图像强度在不连续处的两边的像素灰度值有着显著的差异
  • 线条(屋顶)变化函数,即图像强度突然从一个值变化到另一个值,保持一较小行程后又回到原来的值
图像的边缘有方向和幅度两个属性,沿边缘方向像素变化平缓,垂直于边缘方向像素变化剧烈.边缘上的这种变化可以用微分算子检测出来,通常用一阶或二阶导数来检测边缘。
notion image
ab分别是阶跃函数和屋顶函数的三维图像
cd是阶跃和屋顶函数的函数二维图像
ef对应一阶导数
gh是二阶导数

Sobel算法

Sobel算子是一种常用的边缘检测算子,是一阶的梯度算法。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当对精度要求不是很高时,是一种较为常用的边缘检测方法。

LapLace 算法

拉普拉斯对噪声敏感,会产生双边效果。不能检测出边的方向。通常不直接用于边的检测,只起辅助的角色,检测一个像素是在边的亮的一边还是暗的一边利用零跨越,确定边的位置。

Canny算法

计算过程

  • 用高斯滤波器平滑图像
  • 用一阶偏导的有限差分计算梯度的幅值核方向
  • 对梯度幅值进行非极大值抑制
    • 超过255 用255表示
    • 低于0 用绝对值表示
  • 用双阈值算法检测和连接边缘

API介绍

代码实现

notion image

评论
  • Twikoo
  • Valine