Opencv3.0-python的那些事儿:(七)、Opencv中Canny边缘检测算法使用
2016-06-06 11:57
411 查看
# coding: utf-8 import numpy as np from matplotlib import pyplot as plt import cv2 ''' 19章 Canny边缘检测 步骤: 1噪声去除 使用5*5的高斯滤波器 2计算图像梯度 对平滑后的图像使用Sobel算子计算水平方向和竖直方向的一阶导数(图像梯度) (Gx和Gy)。根据得到的这两幅梯度图(Gx和Gy)找到边界的梯度和方向,公式如下 Edge_Gradient(G)=sqrt( Gx*Gx + Gy*Gy ) Angle(θ)= tan −1( Gx/Gy) 梯度方向一般总是与边界垂直(?),梯度方向被归为四类:垂直,水平,和两个对角线 3非极大值抑制 获得梯度方向和大小后,对整幅图像做扫描,去除非边界上的点。 对每一个像素检查,看这个点的梯度是不是周围具有相同梯度方向的 点中最大的 4滞后阈值 现在要确定那些边界才是真正的边界。这时我们需要设置两个阈值: minVal 和 maxVal。当图像的灰度梯度高于 maxVal 时被认为是真的边界, 那些低于 minVal 的边界会被抛弃。如果介于两者之间的话,就要看这个点是 否与某个被确定为真正的边界点相连,如果是就认为它也是边界点,如果不是 就抛弃 ''' def Canny_test(): img = cv2.imread("roi.jpg" , 0) ''' cv2.Canny(image,threshold1 , threshold2[,edges]) 作用:根据Canny算法检测边界 threshold1:minVal,threshold2:maxVal edges:设置卷积核的大小,L2gradient:默认使用近似值来代替所求的梯度 ''' edges = cv2.Canny(img , 100 , 200) plt.subplot(1,2,1) , plt.imshow(img , cmap="gray") plt.title("Original") , plt.xticks([]) , plt.yticks([]) plt.subplot(1,2,2), plt.imshow(edges , cmap="gray") plt.title("Cannt") , plt.xticks([]) ,plt.yticks([]) plt.show() if __name__ == "__main__": Canny_test()
相关文章推荐
- OpenCV中Canny边缘检测源程序的注释
- Android下用OpenCV3.0库静态链接错误解决方法
- Canny 边缘检测 (Emgu.CV)
- opencv3.0.0环境搭建
- cv_bridge+opencv3.0+ROS Indigo+Clion1.2.2小记
- opencv学习之三:高斯模糊以及canny检测
- Opencv提取不规则ROI
- Ubuntu14.04 64位+Python3.4环境下安装opencv3.0的方法
- Windows7 64位+python3.4环境下安装opencv3.0的方法
- Opencv3.0-python的那些事儿:(一)、Opencv的图像和视频处理基本用法
- Opencv3.0-python的那些事儿:(二)、Opencv的颜色空间转换
- Opencv3.0-python的那些事儿:(三)、Opencv的图像处理中的几何变换
- Opencv3.0-python的那些事儿:(四)、Opencv的图像阈值处理
- Opencv3.0-python的那些事儿:(五)、Opencv的图像模糊
- Opencv3.0-python: 视频处理时报错color.cpp:7456: error: (-215) scn == 3 || scn == 4 的解决办法
- Opencv3.0-python的那些事儿:(八)、Opencv的直方图均衡化
- Opencv3.0-python的那些事儿:(六)、Opencv的图像梯度
- Canny边缘检测算法原理及其VC实现详解(二)
- Canny边缘检测算法原理及其VC实现详解(三)
- 基于canny的边缘检测算法: