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

图像边缘检测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.kler.cn/a/284678.html

相关文章:

  • 【大数据学习 | HBASE高级】storeFile文件的合并
  • React Hooks在现代前端开发中的应用
  • 鸿蒙HarmonyOS 地图不显示解决方案
  • 优化时钟网络之时钟抖动
  • 【面试题】发起一次网络请求,当请求>=1s,立马中断
  • Vue 的生命周期函数 和 Vuex
  • HTTP 之 Web Sockets处理恶意的Payload的策略(十一)
  • const、inline、nullptr的使用
  • Android Activity 的启动模式(Launch Mode)
  • Vue 2 vs Vue 3:v-if 和 v-for 的差异
  • 物流需求回复势头稳定,目前全国社会物流总额达197.7万亿元
  • 从零开学C++:vector类
  • 【MySQL索引】4索引优化
  • Django Compressor压缩静态文件(js/css)
  • 搭建双主四从的MySQL集群
  • 【大模型】LangChain基础学习
  • 某大厂前端面试题
  • 自然语言处理与深度学习的结合
  • Eureka简介与开发
  • Axure RP实战:打造高效文字点选验证码
  • 销冠大模型案例
  • (一) 初入MySQL 【认识和部署】
  • Promise学习
  • k8s-pod 实战六 (如何在不同的部署环境中调整startupprobe的参数?)
  • [QCTF2018]X-man-A face1
  • 基于STM32的智能物料运载小车:OpenMV和OpenCV结合图像识别与运动控制算法优化(代码示例)