人脸检测------canny边缘提取(17)

Canny算法介绍:

canny算法详解
可供参考
1. GaussianBlur
2. 灰度转换:cvtcolor
3. 计算梯度:Sobbel/Scharr
4. 非最大信号抑制
寻找局部像素最大点,剔除很多非边缘点。
5. 高低阈值输出二值图像
减少假边缘段数量的典型方法是对N[i,j]使用一个阈值。将低于阈值的所有值赋零值。但问题是如何选取阈值? 解决方法:双阈值算法。双阈值算法对非极大值抑制图象作用两个阈值τ1和τ2,且2τ1≈τ2,从而可以得到两个阈值边缘图象N1[i,j]和N2[i,j]。由于N2[i,j]使用高阈值得到,因而含有很少的假边缘,但有间断(不闭合)。双阈值法要在N2[i,j]中把边缘连接成轮廓,当到达轮廓的端点时,该算法就在N1[i,j]的8邻点位置寻找可以连接到轮廓上的边缘,这样,算法不断地在N1[i,j]中收集边缘,直到将N2[i,j]连接起来为止。在连接边缘的时候,用数组模拟队列的实现。以进行8-连通域搜索。

opencv中的演示:

def edge_demo(image):
    blurred = cv.GaussianBlur(image, (3,3), 0);
    #GaussianBlur reduce nosie cause canny is noise sensitivity
    gray = cv.cvtColor(blurred, cv.COLOR_BGR2GRAY);
    # X Gradient
    xgrad = cv.Sobel(gray, cv.CV_16SC1, 1, 0);
    ygrad = cv.Sobel(gray, cv.CV_16SC1, 0, 1);

    edge_output = cv.Canny(xgrad, ygrad, 50, 150);
    cv.imshow("edge_dmeo", edge_output);

    dst = cv.bitwise_and(image, image, mask = edge_output);
    cv.imshow("color_edge_demo", dst);

Canny():这是一个重载函数;我们用到的这种参数选择制定图片像素大小为16位导数,所以我们用
CV_16SC1进行初始化。

发布了42 篇原创文章 · 获赞 6 · 访问量 1507

猜你喜欢

转载自blog.csdn.net/qq_41156733/article/details/96425354