当前位置: 首页 > news >正文

图像边缘检测Canny

一、Canny边缘检测原理
边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。
Canny边缘检测算法是由4步构成:噪声去除计算图像梯度非极大值抑制滞后阈值
1、噪声去除:由于边缘检测很容易受到噪声的影响,Canny边缘检测噪声处理采用5x5⾼斯滤波器去除噪声。
2、计算图像梯度:对平滑后的图像使用**Sobel 算子**计算水平方向和竖直方向的⼀阶导数,根据两个一阶导计算边界的梯度和方向。如果像素点是边缘,则其梯度方向总是与边缘垂直。
在这里插入图片描述
3、非极大值抑制:对整幅图像进行扫描,去除那些非边界上的点。对每⼀个像素进行检查,看这个点的梯度是不是周围具有相同梯度方向的点中最大的,若为极大值,则进行保留,否则A点被抑制。
4、滞后阈值:设置两个值: minVal和 maxVal。当图像的灰度梯度高于 maxVal 时被认为是真的边界,低于 minVal 的边界会被抛弃。如果介于两者之间的话,就要看这个点是否与某个被确定为真正的边界点相连,如果是就认为它也是边界点,如果不是就抛弃。
案例
API:

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

示例:

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()

在这里插入图片描述


http://www.mrgr.cn/news/16467.html

相关文章:

  • Oracle数据库大小写问题注意点
  • 【三维重建】三角网格中轴骨架线提取
  • 聊聊 OceanBase 内存管理
  • 【QNX+Android虚拟化方案】112 - 获取 88Q5152 Switch Port1、Port2 端口的主从模式 / 传输速率 / 链路状态
  • vscode和edge浏览器等鼠标输入光标变透明
  • 根据xml模板导出excel
  • 解密电商大促背后的智慧:LSTM与ARIMA模型的双剑合璧
  • 求一个使用C语言将重力加速度gx,gy,gz积分获取到速度的代码
  • 如何开发针对不平衡分类的成本敏感神经网络 python
  • Web自动化测试实战--博客系统
  • 使用WSL在Windows上安装Linux
  • 51单片机.之ADC数字模拟转换
  • python网络爬虫(二)——数据的清洗与组织
  • 计算机毕业设计选题推荐-在线租房平台-房屋租赁系统-Java/Python项目实战
  • TeamTalk消息服务器(未读计数)
  • python网络爬虫(四)——实战练习
  • ref 和 reactive 区别
  • 深度学习项目实践——qq聊天机器人(transformer)(二)配置环境与部署
  • 【QNX+Android虚拟化方案】114 - QNX /dev/switch 节点创建 及 读写功能实现实例
  • 【推荐100个unity插件之30】只需拖放即可实现Unity UI动画——AnimationUI插件的视野