Python,Opencv的Canny边缘检测

  • 1. 效果图
  • 2. 源码
  • 参考

这篇博客将介绍Canny边缘检测的概念,并利用cv2.Canny()实现边缘检测;

  • Canny边缘检测是一种流行的边缘检测算法。它是由约翰F开发的,是一个多阶段的算法;
  • Canny边缘检测大致包含4个步骤:
  1. 降噪(使用高斯滤波去除高频噪声);
  2. 计算边缘梯度和方向(SobelX、SobleY核在水平方向和垂直方向对平滑后的图像进行滤波,找到每个像素的边缘梯度和方向);
  3. 非最大抑制(在得到梯度大小和方向后,对图像进行全扫描,去除任何不需要的像素,这些像素可能不构成边缘。检查像素是否在其梯度方向的邻域中是局部最大值。否则,将被抑制(归零)。简而言之,得到的结果是一个具有“细边”的二值图像。
  4. 滞后阈值(决定哪些边是真正的边,哪些不是。为此需要两个阈值minVal和maxVal,任何强度梯度大于maxVal的边都肯定是边,小于minVal的边肯定是非边,因此丢弃。位于这两个阈值之间的边根据其连通性被分类为边或非边。如果它们连接到“确定边缘”像素,则它们被视为边缘的一部分。否则,它们也会被丢弃。)

选择滞后阈值minVal和maxVal是得到正确结果的关键。

1. 效果图

原始图 VS Canny检测效果图如下:

2. 源码

# Canny边缘检测是一种流行的边缘检测算法。它是由约翰F开发的,是一个多阶段的算法;
# Canny边缘检测大致包含4个步骤:
#
# 1.降噪(使用高斯滤波去除高频噪声);
# 2. 计算边缘梯度和方向(SobelX、SobleY核在水平方向和垂直方向对平滑后的图像进行滤波,找到每个像素的边缘梯度和方向);
# 3. 非最大抑制(在得到梯度大小和方向后,对图像进行全扫描,去除任何不需要的像素,这些像素可能不构成边缘。检查像素是否在其梯度方向的邻域中是局部最大值。否则,将被抑制(归零)。简而言之,得到的结果是一个具有“细边”的二值图像。
# 4. 滞后阈值(决定哪些边是真正的边,哪些不是。为此需要两个阈值minVal和maxVal,任何强度梯度大于maxVal的边都肯定是边,小于minVal的边肯定是非边,因此丢弃。位于这两个阈值之间的边根据其连通性被分类为边或非边。如果它们连接到“确定边缘”像素,则它们被视为边缘的一部分。否则,它们也会被丢弃。)
#
# 选择滞后阈值minVal和maxVal是得到正确结果的关键。
import cv2
from matplotlib import pyplot as pltimg = cv2.imread('zly.jpg', 0)
edges = cv2.Canny(img, 80, 200)plt.subplot(121), plt.imshow(img, cmap='gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(edges, cmap='gray')
plt.title('Edge Image'), plt.xticks([]), plt.yticks([])plt.show()

参考

  • https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_canny/py_canny.html#canny

Python,Opencv cv2.Canny()边缘检测相关推荐

  1. Python+OpenCV:Canny边缘检测

    Python+OpenCV:Canny边缘检测 理论 Canny边缘检测是目前比较流行的边缘检测算法,它由John F. Canny发明. 1. 这是一个多阶段的算法. 2. 降噪:由于边缘检测容易受 ...

  2. python+opencv图像处理之边缘检测车道线识别

    python+opencv图像处理之边缘检测车道线识别 1.自行安装python和opencv 2.导入我们要使用的相关库 import cv2 from matplotlib import pypl ...

  3. OpenCV中Canny边缘检测

    OpenCV中Canny边缘检测 具体的Canny边缘检测原理: 1.消除噪声,使用高斯平滑滤波器卷积降噪 2.计算梯度幅值和方向.利用Sobel滤波器. 得到x和y方向的导数Gx和Gy 计算梯度的幅 ...

  4. python opencv cv2在图片中画mask掩码/掩膜

    python opencv cv2在图片中画mask掩膜 import cv2 import numpy as np from PIL import Image import matplotlib.p ...

  5. python opencv cv2.imread

    python opencv cv2.imread 环境说明 opencv 安装 pip install opencv-python opencv:opencv_python 4.5.5.64 介绍 方 ...

  6. 图像处理——基于OpenCV的canny边缘检测

    前言 边缘检测是处理图像里面的比较重要的一个概念,现在的边缘有传统的处理算法,也有加入深度学习的边缘检测算法,这里把我用过的几种边缘检测做个对比. canny算子 1.OpenCV canny() C ...

  7. python opencv cv2.resize()函数

    **def resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None): # real signature unknown; ...

  8. python opencv cv2.cvtColor()方法(将图像从一种颜色空间转换为另一种颜色空间)(转换成灰度图)

    def cvtColor(src, code, dst=None, dstCn=None): # real signature unknown; restored from __doc__" ...

  9. python opencv cv2.VideoCapture(),read(),waitKey()的使用 ret,frame参数

    参考文章:python-OpenCV2中 cv2.VideoCapture(),read(),waitKey()的使用 VideoCapture.py # encoding: utf-8 # modu ...

最新文章

  1. 安装ubuntu后要做的几件事
  2. maven 整合支付宝,导入alipay-sdk-java包到本地仓库,远程仓库
  3. 万里挑一!北大AI女神每天必看的几个优质公众号
  4. 如果访问云服务器上的文件,如果访问云服务器上的文件
  5. Leetcode--17.电话号码的字母组合
  6. Python通过Zabbix API获得数据
  7. bitnami下mysql配置-包含phpMyAdmin配置
  8. 人脸表情识别从0到部署,猜猜『轮到你了』的微笑狼人到底是谁!
  9. 10分钟带你读完人工智能的三生三世
  10. OpenHarmony 3.2 Release HDF的IDL文件初探(上)
  11. 创建存储过程create procedure
  12. 系统集成项目管理工程师(中级)
  13. 如何修改品牌电脑logo,让你电脑开机更个性
  14. 如何查询我的连连跨境支付提现手续费费率?
  15. 三菱FX系列DPLSY指令使用
  16. 哪些行业适合开发小程序商城
  17. 一文讲解,Linux内核——Memory Barrier(内存屏障)
  18. 计算机单片机实训报告,单片机实训总结
  19. 《隐秘的角落》里笛卡尔的爱情故事,是真的吗?
  20. 社区宽带繁忙是什么意思_嗖!开发区宽带网速已提升至千兆

热门文章

  1. 3D点云重建原理及Pytorch实现
  2. java爬取验证码图片_JAVA HttpClient实现页面信息抓取(获取图片验证码并传入cookie实现信息获取)...
  3. Python 获取字符串的第一位和最后一位的字符
  4. Android layer-list 使用
  5. android gravity和layout_gravity区别
  6. 导入第三方工程报错的处理方法
  7. C#中将结构类型数据存储到二进制文件中方法
  8. Beta 冲刺 (7/7)
  9. 结构化方法与面向对象方法之比较
  10. fastJson的使用