python图形-canny边缘检测算法

canny边缘检测算法是一种流行的边缘检测算法,由John F. Canny in 发明,主要步骤如下:

1.高斯模糊降噪

2.使用Sobel filter计算图片像素梯度

3.NMS非最大值抑制计算局部最大值

4.Hysteresis thresholding 滞后阈值法过滤

其中canny的两个参数T_lower、T_upper就是这里的

----------------------------------------分割线

因为A点是高于阈值的,所以会被canny算法认为是真正的边界点。

C虽然低于最大值,但是它高于最小值,并且它和A相连,所以C也会被认为是边界点。

但是B会被抛弃,它不仅低于最大值,而且不和其他边缘点相连。

综上,选择合适的maxVal和minVal,对于能否得到好的结果非常重要!

代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

img = cv2.imread('./ng.png')
img_fixed = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)

plt.imshow(img_fixed)

edges1 = cv2.Canny(img.copy(),100,200)
edges2 = cv2.Canny(img.copy(),50,200)
edges3 = cv2.Canny(img.copy(),50,100)

fig,(ax2,ax3,ax4) = plt.subplots(1,3,figsize=(20,8),sharex=True,sharey=True)

ax2.axis('off')
ax2.imshow(edges1,cmap='gray')


ax3.axis('off')
ax3.imshow(edges2,cmap='gray')

ax4.axis('off')
ax4.imshow(edges3,cmap='gray')

得到的结果:

结论:第一个图片,作为对比

第二个图片,把最小阈值调低,发现内部细节多了点

第三个图片,把最大阈值再调低,发现细节更多了!

在具体的操作上,多试试不同的参数,会慢慢找到需要的边缘。

接下来,会结合边缘检测,来做目标检测。

 

posted @ 2023-06-25 23:24  沉梦昂志_doc  阅读(84)  评论(0编辑  收藏  举报