边缘检测是图像处理过程中经常涉及的链接。在计算机视觉和机器学习的领域,边缘检测对于特征提取和特征检测尤为明显。openCV中用于边缘检测的算法确实多种多样。在下面,我选择了一些最常用算法的功能API。
请参阅本文所涉及的效果:边缘检测
OPENCV中有一个颜色类型的转换函数,其中转换为灰色图形(cv.color_rgb2gray)出现的经常出现。这是其他操作的基础。颜色类型转换功能:
cv.cvtcolor(src,dst,代码,dstcn = 0)
自适应阈值处理方法通过计算每个像素周围相邻区域的加权平均值,并使用此阈值来处理当前的像素。自适应阈值处理函数:
CV.AdaptivEthreshold(SRC,DST,Maxvalue,AdaptiveMethod,阈值))
效果如下:
SOBEL操作员结合了高斯平滑度和差异操作,并使用当地差异来找到边缘。计算是通过梯度近似值获得的。索贝尔操作员更为特殊的特殊位置是计算水平和垂直计算,然后结合两者。这需要使用cv.AddWeighted.Sobel运算符函数:
cv.sobel(src,dst,ddepth,dx,dy,ksize = 3,比例= 1,delta = 0,borderepe = cv.border_default)
效果如下:
Scharr操作员可以被视为SOBEL操作员的改进。它的准确性更高。调用方法基本上与SOBEL运算符相同,但是Ksize的参数丢失了。
效果如下:
拉普拉斯占用性是第二阶指南,可以在不同方向上符合图像的边缘。Laplacian(Raplacian)操作两个水平和垂直计算。因此,您无需像Sobel Operator和Scharr Operator.laplacian Operator函数那样分别计算XY:
cv.laplacian(src,dst,ddepth,ksize = 1,比例= 1,delta = 0,bordrtype = cv.border_default)
效果如下:
Canny Edge检测是一种使用多阶段边缘检测算法的方法。它将通过过去的嘈杂,计算梯度,非长度值抑制,并确定边缘的步骤,似乎非常强大。
cv.canny(src,dot,threshold1,threshold2,aperturesize = 3,l2gradient = false)
效果如下:
OPENCV还可以结合不同的算法以获得更好的结果。
效果如下:
OPENCV中的边缘检测远远超过上述边缘检测的几个。还有一种更强大的方法来实现边缘检测,即傅立叶变换。它可以完全实现上述算法,但更复杂。我们需要做的是了解每种算法的影响与最合适的场景之间的差异。
原始:https://juejin.cn/post/709783538441460749