python opencv入门 Canny边缘检测(15)
来源:互联网 发布:网络交换器 编辑:程序博客网 时间:2024/05/15 06:10
内容来自OpenCV-Python Tutorials 自己翻译整理
目标
边缘检测的概念
opencv的函数cv2.Canny()
原理
Canny边缘检测很流行,在1986年提出
去除噪声
边缘检测容易受到噪声影响,一般第一步都是用5*5的高斯滤波器去除噪声
计算图像梯度
对平滑后的图像使用sobel算子在水平与竖直方向上计算一阶导数,得到图像梯度(Gx和Gy)。根据梯度图找到边界梯度和方向,公式如下:
梯度方向一般与边界垂直,有四类:垂直、水平、两个对角线。
非极大值抑制
获得图像梯度方向和大小以后,需要对全图像进行扫描去除不属于边界的点。
检查每一个像素,看此像素是否是周围具有相同梯度方向中最大的
A点在边界上(垂直方向),梯度方向是边界的法向量。点B和点C在梯度方向上面,所以点A检测点B和C是否形成了本地最大值,如果形成最大自,那么久进行下一步,否则进行抑制(赋值为0)
简单的说,得到了二值图像的边界。
滞后阈值
现在需要确定哪些边界是真正的边界,需要两个阈值,minVal和maxVal。图像灰度梯度 高于maxVal被认为是真正的边界,低于minVal的舍弃。两者之间的值要判断是否与真正的边界相连,相连就保留,不相连舍弃。
A高于maxVal,是真正边界。C低于maxVal,但是与真正边界相连,也认为是真正边界。B没有和真正阈值相连,而且低于maxVal,抛弃。
opencv使用canny
cv2.Canny()函数,第一个参数是输入图像,第二个和第三个参数是maxVal和minVal
函数原型是这样的
edge = cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient ]]])
apertureSize 为卷积核大小
L2gradient 参数设定求梯度大小的方程
import cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread('3.jpg',0)edges = cv2.Canny(img,100,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()
练习
添加滚动条
import cv2import numpy as npfrom matplotlib import pyplot as pltdef nothing(x): passcv2.namedWindow('res')cv2.createTrackbar('max','res',0,255,nothing)cv2.createTrackbar('min','res',0,255,nothing)img = cv2.imread('1.jpg',0)maxVal=200minVal=100while (1): if cv2.waitKey(20) & 0xFF==27: break maxVal = cv2.getTrackbarPos('min','res') minVal = cv2.getTrackbarPos('max','res') if minVal < maxVal: edge = cv2.Canny(img,100,200) cv2.imshow('res',edge) else: edge = cv2.Canny(img,minVal,maxVal) cv2.imshow('res',edge)cv2.destoryAllWindows()
- python opencv入门 Canny边缘检测(15)
- Python OpenCV -- Canny 边缘检测 (十一)
- OpenCV-Python教程(8、Canny边缘检测)
- OpenCV-Python教程(8、Canny边缘检测)
- opencv+python计算机视觉(一)之边缘检测canny
- opencv-python(13):Canny边缘检测
- 【OpenCV】Canny 边缘检测
- opencv-canny边缘检测
- opencv canny边缘检测
- openCV Canny边缘检测
- 【openCV】Canny边缘检测
- opencv:canny边缘检测
- opencv-Canny 边缘检测
- opencv Canny边缘检测
- openCV canny边缘检测
- opencv canny边缘检测
- opencv canny边缘检测
- OpenCV Canny边缘检测
- 七月算法深度学习 第三期 学习笔记-第九节 强化学习与Deep Q-Network
- JVM 的类初始化机制
- 关于如何写一个数据协议(草稿)
- 排序算法——插入排序
- 【Go】Go语言中反射包的实现原理(The Laws of Reflection)
- python opencv入门 Canny边缘检测(15)
- 编程实战之:NTC采样程序设计
- 根据MAC地址生成软件的序列号
- 帧布局
- 自定义栈和队列
- vue表单验证组件 v-verify-plugin
- 二分图匹配之最佳匹配 km算法详解
- wechat-plus 使用node开发微信公众号
- node 控制 树莓派做的天气闹钟