python opencv Sobel、Laplace、canny算子的边缘提取 以及参数解析
前提:各种算子不完全区分好坏,但根据我实际操作分析得到,有的算子之间效果大相径庭,但有的也很相似,也就是各有各的用法,这里按
Sobel、Laplace、canny三种算子作比较,看其结果:
一、 Sobel、Laplace、canny边缘提取()
- Sobel算子边缘提取
注释:gray 灰度转换后的图像,前面省略了一部灰度转换的步骤,后面代码会补上
1,表示x方向的差分阶数,1或0------------------------------>如果只写一个1,代表x方向提取---》1,0
1,表示y方向的差分阶数,1或0------------------------------->如果只写一个1,代表y方向提取---》0,1
sobel = cv2.Sobel(gray, cv2.CV_8U, 1, 1)#sobel算子边缘检测 PointInvert_sobel=255-sobel#反色
2.Laplace算子边缘提取
注释:这里要说的是通过对比sobel算子的结果,发现Laplace比sobel效果更好,可以说是加强版,效果如下所示
laplace = cv2.Laplacian(gray, cv2.CV_8U, ksize=3)#laplace算子边缘检测 PointInvert_laplace=255-laplace
3.Canny算子边缘提取
注释:上一节提到过:其效果多变,主要是看设置的阈值的范围,
当我们改变阈值后,图像后渐渐过滤掉一些背景,当然,重在阈值的选取上,当阈值选大的时候,也是会将图像的特征完全损坏的。
canny=cv2.Canny(gray, 50, 150)#canny边缘检测 PointInvert_canny=255-canny#canny图像反色 函数中阈值1和阈值2两者的小者用于边缘连接,而大者用来控制强边缘的初始段,推荐的高低阈值比在2:1到3:1之间
二、四种图像的代码演示
三、源码