边缘检测
一、Canny边缘检测
1.步骤
- 1)使用高斯滤波器,以平滑图像,滤除噪声。
- 2)计算图像中每个像素点的梯度强度和方向。
- 3)应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。(如果检测出三种结果99%,97%,98%,只选择99%的抑制其他的)
- 4)应用双阈值(Double-Threshold)检测来确定真是的和潜在的边缘。
- 5)通过抑制孤立的弱边缘最终完成边缘检测。
2.梯度和方向
3.非极大值抑制
主要看梯度的幅值大小
C比Q、Z都大的时候,就保留C;否则C就不是边界,就会被抑制
4.双阈值检测
import cv2
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline #专有魔法指令,即时显示
def cv_show(name,img):
cv2.imshow(name,img)
cv2.waitKey(0)
cv2.destoryAllWindows()
img = cv2.imread("lena.jpg", cv2.IMREAD_GRAYSCALE)
v1 = cv2.Canny(img, 80, 150) # 值大,标准越高,细节越少
v2 = cv2.Canny(img, 50, 100)
res = np.hstack((v1, v2))
cv_show(res, 'res')
二、常用函数
-
cv2.Canny(img, threshold1, threshold2)
边缘检测(threshold<value<threshold2,范围越大,边缘检测细节越多