OpenCV-Python-边缘检测

摘要:
Canny边缘检测的具体步骤如下:1。使用5x5高斯滤波器消除噪声:边缘检测本身属于锐化操作,对噪声敏感,因此需要平滑。有关高斯滤波的具体内容,请参阅上一篇文章:OpenCV Python教程9-平滑图像2。计算图像梯度的方向:首先使用Sobel算子计算两个方向上的梯度Gx和Gy,然后计算梯度方向:保持这四个方向的梯度:0°、45°、90°、135°3。取局部最大值:取四个角度方向4上的局部最大值。在前三个步骤之后,滞后阈值保留0和可能的边缘梯度值。

Canny边缘检测方法被誉为边缘检测的最优方法。

import cv2
import numpy as np
img = cv2.imread('handwriting.jpg', 0)
edges = cv2.Canny(img, 30, 70)    # canny边缘检测

cv2.imshow('canny', np.hstack((img, edges)))
cv2.waitKey(0)

OpenCV-Python-边缘检测第1张

cv2.Canny()进行边缘检测,参数2、参数3表示最低和最高阈值。

Canny边缘检测

具体步骤如下:

1. 使用5x5高斯滤波消除噪声:

边缘检测本身属于锐化操作,对噪声比较敏感,所以需要进行平滑处理。高斯滤波的具体内容参考前篇:OpenCV-Python教程9-平滑图像

OpenCV-Python-边缘检测第2张

2. 计算图像梯度的方向:

首先使用Sobel算子计算两个方向上的梯度Gx和Gy,然后算出梯度的方向:

OpenCV-Python-边缘检测第3张

保留这四个方向上的梯度:0°、45°、90°、135°

3. 取局部最大值:

在四个角度方向上取局部最大值

4. 滞后阈值

经过前面三步,剩下0和可能的边缘梯度值。通过设定两个阈值来筛选阈值:

OpenCV-Python-边缘检测第4张

  • 像素点的值大于最高阈值,那肯定是边缘(上图A)
  • 像素值小于最低阈值,那肯定不是边缘
  • 像素值介于两者之间,如果高于最高阈值的点连接,也算边缘。所以C算,B不算

Canny推荐的高低阈值比在 2 : 1 到 3 : 1 之间

先阈值分割后检测

很多情况下,先阈值分割后再检测边缘,效果会更好:

# 先阈值分割后检测
_, thresh = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

edges = cv2.Canny(thresh, 30, 70)

cv2.imshow('canny', np.hstack((img, thresh, edges)))
cv2.waitKey(0)

OpenCV-Python-边缘检测第5张

参考地址:http://ex2tron.wang/opencv-python-edge-detection/

免责声明:文章转载自《OpenCV-Python-边缘检测》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JS事件 失焦事件(onblur)onblur事件与onfocus是相对事件,当光标离开当前获得聚焦对象的时候,触发onblur事件,同时执行被调用的程序。Android9.0 Settings 修改踩坑记录下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【HEVC简介】DB-DeBlock Filter

参考论文:HEVC Deblocking Filter 《HEVC标准介绍、HEVC帧间预测论文笔记》系列博客,目录见:http://www.cnblogs.com/DwyaneTalk/p/5711333.html 一、Deblock Filter的目的 在AVC中,图像被分成16x16的MB,对于HEVC则分成16x16到64x64的LCU,LCU...

MySQL连接控制插件介绍

1.连接控制(connection_control)插件介绍 MySQL 服务端包含一个插件库,可以自定义安装各类插件。connection_control 插件也是其中一种,主要用来控制客户端在登录操作连续失败一定次数后的响应的延迟。该插件可有效的防止客户端暴力登录的风险。该插件包含以下两个组件: CONNECTION_CONTROL:用来控制登录失败...

Halcon斑点分析BlobAnalysis解析

斑点分析的算法非常简单:在图像中,相关对象的像素(也称为前景)通过其灰度值来识别。例如,图中示例显示了液体中的组织颗粒。这些粒子是明亮的,液体(背景)是暗的。通过选择明亮的像素(阈值),可以很容易检测到颗粒。在许多应用中,暗像素和亮像素的简单条件不再成立,但结果相同可以通过额外的预处理或像素选择/分组的替代方法来实现。 在这种情况下,斑点分析的优点是HAL...

基于MATLAB的Sobel边缘检测算法实现

图像边缘就是图像灰度值突变的地方,也就是图像在该部分的像素值变化速度非常之快,就比如在坐标轴上一条曲线有刚开始的平滑突然来个大转弯,在变化出的导数非常大。 Sobel算子主要用作边缘检测,它是一离散型差分算子,用来计算图像亮度函数灰度之近似值。 边缘是指其周围像素灰度急剧变化的那些像素的集合。边缘存在于目标、背景和区域之间,所以,边缘是图像分割所依赖的最重...

Halcon学习之边缘检测函数

sobel_amp( Image: EdgeAmplitude: FilterType, Size:)根据图像的一次导数计算图像的边缘 close_edges( Edges, EdgeImage: RegionResult: MinAmplitude:) close_edges_length( Edges, Gradient: ClosedEdges: M...

[转载+原创]Emgu CV on C# (六) —— Emgu CV on Canny边缘检测

Canny边缘检测也是一种边缘检测方法,本文介绍了Canny边缘检测的函数及其使用方法,并利用emgucv方法将轮廓检测解算的结果与原文进行比较。 图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘。Canny边缘检测算子是John F. Canny于1986年开发出来的一个多级边缘检...