图像边缘检测Canny

一、Canny边缘检测原理

边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。

Canny边缘检测算法是由4步构成:噪声去除计算图像梯度非极大值抑制滞后阈值

1、噪声去除 :由于边缘检测很容易受到噪声的影响,Canny边缘检测噪声处理采用5x5**⾼斯滤波器** 去除噪声。

2、计算图像梯度 :对平滑后的图像使用**Sobel 算子**计算水平方向和竖直方向的⼀阶导数,根据两个一阶导计算边界的梯度和方向。如果像素点是边缘,则其梯度方向总是与边缘垂直。

3、非极大值抑制 :对整幅图像进行扫描,去除那些非边界上的点。对每⼀个像素进行检查,看这个点的梯度是不是周围具有相同梯度方向的点中最大的,若为极大值,则进行保留,否则A点被抑制。

4、滞后阈值 :设置两个值: minVal和 maxVal。当图像的灰度梯度高于 maxVal 时被认为是真的边界,低于 minVal 的边界会被抛弃。如果介于两者之间的话,就要看这个点是否与某个被确定为真正的边界点相连,如果是就认为它也是边界点,如果不是就抛弃。
案例

API:

python 复制代码
canny = cv2.Canny(image, threshold1, threshold2)
image:灰度图
threshold1: minval,较⼩的阈值
threshold2: maxval,较⼤的阈值

示例:

python 复制代码
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']    #定义使其正常显示中文字体黑体
# plt.rcParams['axes.unicode_minus'] = False     #用来正常显示表示负号
# 1 图像读取
img = cv.imread('./image/dog.jpg',0)
# 2 Canny边缘检测
canny = cv.Canny(img,10,100) 
# 3 图像展示
plt.figure(figsize=(10,8))
plt.subplot(121),plt.imshow(img,cmap=plt.cm.gray),plt.title('原图')
plt.xticks([]), plt.yticks([]) #x,y轴置空
plt.subplot(122),plt.imshow(canny,cmap = plt.cm.gray),plt.title('Canny检测后结果')
plt.xticks([]), plt.yticks([])
# 4、保存图像到本地
plt.savefig('canny_detection_result.png')  
plt.show()
相关推荐
川西胖墩墩几秒前
游戏NPC的动态决策与情感模拟
人工智能
E_ICEBLUE2 分钟前
零成本实现文档智能:本地化 OCR 提取与 AI 处理全流程实战
人工智能·ocr
乾元2 分钟前
无线定位与链路质量预测——从“知道你在哪”,到“提前知道你会不会掉线”的网络服务化实践
运维·开发语言·人工智能·网络协议·重构·信息与通信
MistaCloud3 分钟前
Pytorch深入浅出(十五)之GPU加速与设备管理
人工智能·pytorch·python·深度学习
源于花海3 分钟前
迁移学习的第一类方法:数据分布自适应(3)——联合分布自适应
人工智能·机器学习·迁移学习·联合分布自适应
梁辰兴4 分钟前
中国信通院发布《人工智能安全治理研究报告(2025年)》,AI安全攻防为何“易攻难守“?
人工智能·安全·ai·ai安全·梁辰兴·人工智能安全治理·中国信通院
Suahi12 分钟前
【HuggingFace LLM】规范化与预分词(BPE、WordPiece以及Unigram)
大数据·人工智能
元智启16 分钟前
企业 AI 应用进入 “能力解耦时代”:模块化重构 AI 落地新范式
大数据·人工智能·重构
RockHopper202516 分钟前
驾驶认知的本质:人类模式 vs 端到端自动驾驶
人工智能·神经网络·机器学习·自动驾驶·具身认知
小真zzz17 分钟前
【2026新体验】ChatPPT的AI智能路演评测:PPT总结和问答都变的易如反掌
大数据·人工智能·ai·powerpoint·ppt·chatppt