OpenCV—python 边缘检测(Canny)

article/2025/9/23 18:06:33

边缘检测

      • 一、边缘定义及类型
      • 二、边缘检测算子类别
      • 三、OpenCV-Python 中 Canny() 参数

一、边缘定义及类型

边缘类型:简单分为4中类型,阶跃型、屋脊型、斜坡型、脉冲型,其中阶跃型和斜坡型是类似的,只是变化的快慢不同。
在这里插入图片描述

二、边缘检测算子类别

边缘检测算子:

  • 一阶导数: Roberts、Sobel、Prewitt
  • 二阶导数: Laplacian、Log/Marr、(Kirsch、Nevitia)
  • 非微分边缘检测算子: Canny
    关于算子详情请查看:https://blog.csdn.net/wsp_1138886114/article/details/81368890
    在这里插入图片描述

三、OpenCV-Python 中 Canny() 参数

步骤:

  • 彩色图像转换为灰度图像(以灰度图或者单通道图读入)
  • 对图像进行高斯模糊(去噪)
  • 计算图像梯度,根据梯度计算图像边缘幅值与角度
  • 沿梯度方向进行非极大值抑制(边缘细化)
  • 双阈值边缘连接处理
  • 二值化图像输出结果
"""
cv2.Canny(image,            # 输入原图(必须为单通道图)threshold1, threshold2,       # 较大的阈值2用于检测图像中明显的边缘[, edges[, apertureSize[,    # apertureSize:Sobel算子的大小L2gradient ]]])   # 参数(布尔值):true: 使用更精确的L2范数进行计算(即两个方向的倒数的平方和再开放),false:使用L1范数(直接将两个方向导数的绝对值相加)。
"""import cv2
import numpy as np  original_img = cv2.imread("qingwen.png", 0)# canny(): 边缘检测
img1 = cv2.GaussianBlur(original_img,(3,3),0)
canny = cv2.Canny(img1, 50, 150)# 形态学:边缘检测
_,Thr_img = cv2.threshold(original_img,210,255,cv2.THRESH_BINARY)#设定红色通道阈值210(阈值影响梯度运算效果)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))         #定义矩形结构元素
gradient = cv2.morphologyEx(Thr_img, cv2.MORPH_GRADIENT, kernel) #梯度cv2.imshow("original_img", original_img) 
cv2.imshow("gradient", gradient) 
cv2.imshow('Canny', canny)cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述
可调整阈值大小的程序

import cv2
import numpy as npdef CannyThreshold(lowThreshold):detected_edges = cv2.GaussianBlur(gray,(3,3),0)detected_edges = cv2.Canny(detected_edges,lowThreshold,lowThreshold*ratio,apertureSize = kernel_size)dst = cv2.bitwise_and(img,img,mask = detected_edges)  # just add some colours to edges from original image.cv2.imshow('canny demo',dst)lowThreshold = 0
max_lowThreshold = 100
ratio = 3
kernel_size = 3img = cv2.imread('qingwen.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)cv2.namedWindow('canny demo')cv2.createTrackbar('Min threshold','canny demo',lowThreshold, max_lowThreshold, CannyThreshold)CannyThreshold(0)  # initialization
if cv2.waitKey(0) == 27:cv2.destroyAllWindows()

在这里插入图片描述


http://chatgpt.dhexx.cn/article/nBKTQSEe.shtml

相关文章

Canny算子Matlab实现

1、Canny边缘提取原理 Canny边缘检测方法利用了梯度方向信息,采用“非极大抑制”以及双阈值技术,获得了单像素连续边缘,是目前所认为的检测效果较好的一种边缘检测方法。 先利用高斯函数对图像进行低通滤波;然后对图像中的每个像…

canny算子的python实现以及pytorch实现

canny算子的python实现以及pytorch实现 canny的python实现canny的pytorch实现 canny的python实现 参考Canny边缘检测算法(python 实现) import numpy as np import cv2 as cv from matplotlib import pyplot as pltdef smooth(image, sigma 1.4, length 5) :&qu…

Python 使用cv2.canny 进行图像边缘检测

CV2提供了提取图像边缘的函数canny。其算法思想如下: 1. 使用高斯模糊,去除噪音点(cv2.GaussianBlur)2. 灰度转换(cv2.cvtColor)3. 使用sobel算子,计算出每个点的梯度大小和梯度方向4. 使用非极…

计算机视觉中Canny算子详解

文章目录 前言一、Canny的实现步骤二、具体实现1.高斯平滑滤波2.计算梯度大小和方向3.非极大抑制4.双阈值(Double Thresholding)和滞后边界跟踪 总结 前言 Canny边缘检测是一种非常流行的边缘检测算法,是John Canny在1986年提出的。它是一个多阶段的算法&#xff0c…

Canny 边缘检测算法

目录 一、边缘检测的步骤 二、最优边缘定义 三、Canny边缘检测算法步骤 1.对图像进行灰度化: 2.对图像进行高斯滤波: 3. 计算梯度幅值和方向 4.非极大值(Non-Maximum Suppression)抑制 5.用双阈值算法检测和连接边缘 代…

Canny算法

Canny Canny分为5个步骤 1)、使用高斯滤波器,以平滑图像,滤除噪声。 高斯滤波器是一种平滑空间滤波器,用于模糊处理和降低噪声。我们的高斯滤波器通过以下公式得到。 我们运用该公式计算出高斯卷积核,如k越大,检测…

OpenCv之Canny

目录 一、自适应阈值 二、边缘检测Canny 一、自适应阈值 引入前提:在前面的部分我们使用是全局闻值,整幅图像采用同一个数作为闻值。当时这种方法并不适应与所有情况,尤其是当同一幅图像上的不同部分的具有不同亮度时。这种情况下我们需要采用自适应闻…

图像处理——Canny算子

首先感谢以下两位的渊博知识: (1)爱鱼 https://www.cnblogs.com/mightycode/p/6394810.html (2)mitutao https://www.cnblogs.com/love6tao/p/5152020.html 图像边缘信息主要集中在高频段,通常…

Canny算子与霍夫变换检测圆与直线

目录 引言 一、canny算子 二、canny算子代码 三、霍夫变换检测直线 四、霍夫变换检测直线代码 五、霍夫变换检测直线效果 六、霍夫变换检测圆 七、霍夫变换检测圆代码 八、霍夫变换检测圆效果 引言 canny算子是计算机视觉最常用的一种算子,是目前一种非常流行…

OpenCV——Canny边缘检测(cv2.Canny())

Canny边缘检测 Canny 边缘检测是一种使用多级边缘检测算法检测边缘的方法。1986 年,John F. Canny 发 表了著名的论文 A Computational Approach to Edge Detection,在该论文中详述了如何进行边缘 检测。 Canny()边缘检测步骤 Canny 边缘检测分为如下…

(十一)Canny 边缘检测算法

Canny边缘检测算法 一、边缘检测的步骤 1)滤波: 边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪声很敏感, 因此必须采用滤波器来改善与噪声有关的边缘检测器的性能。常见的滤波方法主要有高斯滤波、均值滤波…

Canny边缘检测算法的实现

图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波。我们知道微分运算是求信号的变化率,具有加强高频分量的作用。在空域运算中来说,对图像的锐化就是计算微分。由于数字图像的离散信号,微分运…

【canny边缘检测】canny边缘检测原理及代码详解

文章目录 前言canny边缘检测算法主要流程一、高斯模糊二、图像梯度计算三、非极大值抑制四、双阈值边界跟踪 前言 本文通过介绍canny边缘检测原理与代码解析,希望能让大家深入理解canny边缘检测 canny边缘检测算法主要流程 canny边缘检测主要分为4个部分&#xff…

Canny边缘检测原理

一. Canny基本思想 1. 边缘检测 解析:边缘是对象和背景之间的边界,还能表示重叠对象之间的边界。边缘检测是图像分割的一部分,图像分割的目的是识别出图像中的区域。边缘检测是定位边缘像素的过程,而边缘增强是增加边缘和背景之…

Canny边缘检测

边缘检测发展 Canny 边缘检测是一种从不同视觉对象中提取有用结构信息并显着减少要处理的数据量的技术。它已广泛应用于各种计算机视觉系统。 Canny 发现,在不同的视觉系统上应用边缘检测的要求是比较相似的。因此,可以在各种情况下实施满足这些要求的边…

Canny边缘检测算法(python 实现)

文章目录 最优边缘准则算法实现步骤1. 应用高斯滤波来平滑(模糊)图像,目的是去除噪声2. 计算梯度强度和方向3. 应用非最大抑制技术NMS来消除边误检4. 应用双阈值的方法来决定可能的(潜在的)边界5. 利用滞后技术来跟踪边界 opencv实现Canny边缘…

左外连接和右外连接是什么样的?

1左外连接 左表的记录都会出现在结果集中,并上右表与之对应的部分,如果右表没有,使用null填充。 举例。 select * from people p left join role r p.idr.id 左外连接结果: 2、右外连接 右表的记录都会出现在结果集中&#xf…

sql左外连接和右外连接的区别

一、数据集合不同 1、左外连接:是A和B的交集再并上A的所有数据。 2、右外连接:是A和B的交集再并上B的所有数据。 二、语法不同 1、左外连接:SELECT *FROM aLEFT OUTER JOIN bON a.ageId b.id。 2、右外连接:SELECT *FROM a…

MySQL自连接和内连接和外连接_左外连接+右外连接

自连接:将一张表看作两张表 练习:查询员工id,员工姓名及其管理者的id和姓名select emp.employee_id,emp.last_name,mgr.employee_id,mgr.last_name from employees emp,employees mgr where emp.manager_id mgr.employee_id;内连接 只是把左…

SQL--左外连接(LEFT JOIN)

LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。 SQL LEFT JOIN 语法: SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.c…