zoukankan      html  css  js  c++  java
  • OpenCV4【21】拉普拉斯算子 进行 模糊检测

    原理简介

    让图像的单一通道(大概灰度)和以下3 x 3的内核进行卷积

    然后取相应的方差。

    如果方差低于预先定义的阈值,则认为图像模糊;否则,图像不会模糊。

    这种方法有效的原因是由于Laplacian算子本身的定义,它用于测量图像的二阶导数

    拉普拉斯算子突出显示图像中包含快速梯度变化的区域,很像Sobel和Scharr算子。和这些算子一样,Laplacian也经常用于边缘检测。

    这里的假设是,如果一幅图像的方差较高,那么就说明图像有广泛的响应,包括类边和非类边,这是一幅正常的聚焦图像的代表。

    但如果方差很低,那么就会有很小的响应扩散,这表明图像中几乎没有边缘。而图像越模糊,边缘就越少。所以可以用来检测是否模糊。

    显然,这里的关键是设置正确的阈值,而阈值的设置与应用到的图像集相关。

    如果阈值过低,你就会错误地将原本不模糊的图像标记为模糊。

    如果阈值过高,那么实际上模糊的图像将不会被标记为模糊。这种方法只有在非常稳定的图像集(同一类型)中应用良好。

    用法

    示例代码,注意转换灰度图,但是我没转也没报错

    import cv2 as cv
    
    image1 = cv.imread('imgs/tulips_1.jpg')
    image1 = cv.cvtColor(image1, cv.COLOR_BGR2GRAY)
    v1 = cv.Laplacian(image1, cv.CV_64F).var()
    
    image2 = cv.imread('imgs/melian.png')
    image2 = cv.cvtColor(image2, cv.COLOR_BGR2BGRA)
    v2 = cv.Laplacian(image2, cv.CV_64F).var()
    
    print(v1, v2)       # 757.6573775277777 302.6699592172611

     

    参考资料:

    https://mp.weixin.qq.com/s/z8pob0V106fnjfJCLsTl3g  使用OpenCV进行模糊检测(拉普拉斯算子)

  • 相关阅读:
    java连接oracle
    用js实现登录的简单验证
    合并链表,按主键升序
    Jquery中.ajax和.post详解
    简洁的Jquery弹出窗插件
    服务端缓存页面及IIS缓存设置
    C#托管代码、非托管代码及回收机制
    页面滑动底部自动加载下一页信息
    EF各版本增删查改及执行Sql语句
    Node.Js and Mongoose
  • 原文地址:https://www.cnblogs.com/yanshw/p/15587091.html
Copyright © 2011-2022 走看看