• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    OpenCV半小时掌握基本操作之边缘检测

    【OpenCV】⚠️高手勿入! 半小时学会基本操作⚠️ 边缘检测

    概述

    OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 OpenCV 的世界. (第 12 课)

    Scharr 算子

    Scharr 算子和 Sobel 算子基本一样. 只是卷积核系数不同. Scharr 算子对边界更加敏感, 也更容易误判.

    卷积核参数:

    例子:

    # Scharr 算子
    scharr_x = cv2.Scharr(img, cv2.CV_64F, 1, 0)
    scharr_y = cv2.Scharr(img, cv2.CV_64F, 0, 1)
    
    # 取绝对值
    scharr_x = cv2.convertScaleAbs(scharr_x)
    scharr_y = cv2.convertScaleAbs(scharr_y)
    
    # 融合
    scharr_xy = cv2.addWeighted(scharr_x, 0.5, scharr_y, 0.5, 0)
    
    # 展示图片
    cv2.imshow("scharr_xy", scharr_xy)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    输出结果:

    Laplacian 算子

    拉普拉斯算子 (Laplacian) 是图像二阶空间导数的二维向同性测度. 拉普拉斯算子可以突出图像中强度发生快速变化的区域, 因此常用在边缘检测任务当中.

    在进行 Laplacian 操作之前通常需要先用高斯平滑滤波器 (Gaussian Blur) 降低 Laplacian 算子对于噪声的敏感性.

    卷积核参数:

    例子:

    # 读取图片, 并准换成灰度图
    img = cv2.imread("Mona_Lisa.jpg", cv2.IMREAD_GRAYSCALE)
    
    # 高斯滤波器 (3 X 3)
    img = cv2.GaussianBlur(img, (3, 3), sigmaX=0.1)
    
    # Laplacian 算子
    laplacian = cv2.Laplacian(img, cv2.CV_64F)
    
    # 取绝对值
    laplacian = cv2.convertScaleAbs(laplacian)
    
    # 展示图片
    cv2.imshow("laplacian", laplacian)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    输出结果:

    注: Sigma 值越小, 模板的中心系数就越大, 周围的系数较小, 平滑的效果就不是很明显.

    Sobel vs Scharr vs Laplacian

    Canny 边缘检测

    Canny 边缘检测是非常流行的一种边缘检测算法, 由 John Canny 在 1986 年提出.

    步骤:

    1. 使用高斯滤波器, 平滑图像, 消除噪声
    2. 计算图像中每个像素点的梯度强度和方向
    3. 使用没极大值抑制 (Non-Maximum Suppression) 消除边缘检测带来的杂散响应
    4. 使用双阈值检测 (Double Threshold) 来确定真实和潜在的边缘
    5. 通过抑制孤立的弱边缘最终完成边缘检测

    高斯滤波器

    梯度和方向

    非极大值抑制

    双阈值检测

    例子

    # 读取图片, 并转换成灰度图
    img = cv2.imread("Mona_Lisa.jpg", cv2.IMREAD_GRAYSCALE)
    
    # Canny边缘检测
    out1 = cv2.Canny(img, 50, 150)
    out2 = cv2.Canny(img, 100, 150)
    
    # 合并
    canny = np.hstack((out1, out2))
    
    # 展示图片
    cv2.imshow("canny", canny)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    输出结果:

    到此这篇关于OpenCV半小时掌握基本操作之边缘检测的文章就介绍到这了,更多相关OpenCV边缘检测内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • Python OpenCV实现边缘检测
    • OpenCV中Canny边缘检测的实现
    • Python实现Opencv cv2.Canny()边缘检测
    • 使用Python中OpenCV和深度学习进行全面嵌套边缘检测
    • OpenCV实现灰度、高斯模糊、边缘检测的示例
    • Python使用Opencv实现边缘检测以及轮廓检测的实现
    • 如何利用Python 进行边缘检测
    • python实现canny边缘检测
    上一篇:Python爬虫和反爬技术过程详解
    下一篇:Pandas数据分析之批量拆分/合并Excel
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    OpenCV半小时掌握基本操作之边缘检测 OpenCV,半小时,掌握,基本操作,