import cv2
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as c
def cv_show(img):
cv2.imshow("img",img)
cv2.waitKey(0)
def cv_read(img_file,gray=True):
if gray == True:
return cv2.imread(img_file,0)
else:
return cv2.imread(img_file)
边缘检测步骤及原理
高斯滤波器
梯度计算
非极大值抑制
- 比较当前 A 点和临近两个点 B,C 沿着梯度方向的值
- 如果 A 的值是最大值,那么就保留 A 作为边界,再沿着梯度的方向作出垂直方向的线即是边界
方法一
方法二
- 简化版本
双阈值检测
'''使用的都是lena的图'''
img = cv2.imread("img.png",cv2.IMREAD_GRAYSCALE)
v1 = cv2.Canny(img,80,150)
v2 = cv2.Canny(img,50,100)
res = np.hstack((v1,v2))
cv_show(res)
img = cv2.imread("img.png",cv2.IMREAD_GRAYSCALE)
v1 = cv2.Canny(img,120,250)
v2 = cv2.Canny(img,50,100)
res = np.hstack((v1,v2))
cv_show(res)