目录

  • 一、场景需求解读
  • 二、模糊图片检测方案简介
  • 三、模糊图片检测原理简介
  • 四、算法实现步骤
  • 五、算法代码实现
  • 六、算法效果展示与分析
  • 参考资料
  • 注意事项

一、场景需求解读

  现实场景中,我们经常会使用不同的设备区拍摄一些照片,常用的一些设备包括手机、相机等,但是在拍摄的过程中可能会受到一些因素的影响,最终导致拍摄出来的照片比较模糊。对于这些图片而言,我们经常利用人眼进行观察,这样比较费时费力,本文针对这个问题提出了一种全自动的方法来检测模糊的图片,这样可以极大的节约用户的时间。下图展示了一个案例,其中包含几张模糊的图片和清晰的图片。

二、模糊图片检测方案简介

方案一

  • 首先对输入的图片进行快速傅里叶变换操作;
  • 然后检测图片中高频分量和低频分量的分布情况;
  • 接着根据图片中包含的高频分量的多少进行合适的判断,如果图片中含有较少的高频分量,则表明该图片是模糊图片,否则是清晰图片。

方案二: 根据该文章的思路来进行检测。即根据Laplacian变换的方差值进行判断。

通过对比这两个方案,我们可以发现方案二更快、更方便。

三、模糊图片检测原理简介

  整个算法的原理和拉普拉斯算子本身的定义有关,该算子主要用来测量图像的二阶导数。它强调了包含快速强度变化的图像区域。拉普拉斯算子经常被用来做边缘检测。这里存在着一个假设,即如果一个图像中包含着高方差,那么在图像中会有较大范围的响应,包括边缘和非边缘,这代表着一张正常图像。但是如果该图像的方差很低,那么响应的范围很小,这表明图像中的边缘很小。众所周知的是当图像越模糊时,包含的边缘信息就会越少。

四、算法实现步骤

步骤1-读取输入图片;
步骤2-输入图片灰度化;
步骤3-与特定的Laplacian核进行卷积;
步骤4-计算响应的方差值;
步骤5-如果当前的方差值<threshold,则该图片为模糊图片,否则不是模糊图片。

五、算法代码实现

# coding=utf-8
# 导入相应的python包
from imutils import paths
import argparse
import cv2def variance_of_laplacian(image):'''计算图像的laplacian响应的方差值'''return cv2.Laplacian(image, cv2.CV_64F).var()if __name__ == '__main__':# 设置参数ap = argparse.ArgumentParser()ap.add_argument("-i", "--images", required=True, help="设置输入图片的路径")ap.add_argument("-t", "--threshold", type=float, default=100.0, help="设置模糊阈值")args = vars(ap.parse_args())# 遍历每一张图片for imagePath in paths.list_images(args["images"]):# 读取图片image = cv2.imread(imagePath)# 将图片转换为灰度图片gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 计算灰度图片的方差fm = variance_of_laplacian(gray)text = "Not Blurry"# 设置输出的文字if fm < args["threshold"]:text = "Blurry"# 显示结果cv2.putText(image, "{}: {:.2f}".format(text, fm), (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 3)cv2.imshow("Image", image)key = cv2.waitKey(0)

运行方法:python detece_blur_imgae.py -i 图片路径 (这里的图片路径需要修改成你自己的路径)

六、算法效果展示与分析


  上图展示了该算法的检测结果,通过观察上图我们可以获得一些信息,即该算法能够准确的检测出模糊图片,并在图片的左上角区域内输出结果并展示相应的方差值。尽管该算法的思路和实现都比较简单,但是它简单高效。

参考资料

[1] 参考链接

注意事项

[1] 该博客是本人原创博客,如果您对该博客感兴趣,想要转载该博客,请与我联系(qq邮箱:1575262785@qq.com),我会在第一时间回复大家,谢谢大家的关注.
[2] 由于个人能力有限,该博客可能存在很多的问题,希望大家能够提出改进意见。
[3] 如果您在阅读本博客时遇到不理解的地方,希望您可以联系我,我会及时的回复您,和您交流想法和意见,谢谢。
[4] 本文测试的图片可以通过该链接进行下载。网盘链接- 提取码:tnzs 。
[5] 本人业余时间承接各种本科毕设设计和各种小项目,包括图像处理(数据挖掘、机器学习、深度学习等)、matlab仿真、python算法及仿真等,有需要的请加QQ:1575262785详聊,备注“项目”!!!

Python+Opencv检测模糊图片相关推荐

  1. python opencv检测人脸

    python opencv检测人脸 文章目录: 一.opencv检测一张图片 二.opencv摄像头实时检测人脸 一.opencv检测一张图片 opencv检测人脸分成三部分: 1.图片转换成灰色(降 ...

  2. python opencv 检测特定颜色

    python opencv 检测特定颜色 import cv2 import numpy as npcap = cv2.VideoCapture(0)# set blue thresh 设置HSV中蓝 ...

  3. python+opencv将表格图片按照表格框线分割、识别

    如下小程序为使用python+opencv将表格图片,按照表格进行分割,并识别分割后的子图片中的文字,希望对需要的小伙伴有一些些帮助.具体的实现见如下代码. # -*- coding: utf-8 - ...

  4. python opencv 如何给图片添加文字?cv2.putText() PIL

    参考文章1:python如何在图片上添加文字(中文和英文)Python在图片上添加文字的两种方法:OpenCV和PIL 参考文章2:python之------如何在图片上面添加文字(多种类型的文字)[ ...

  5. python+OpenCV检测条形码

    今天看到一篇关于条形码检测的文章,还是存在一些问题的,昨天我陪朋友去取快递的时候,看到了关于条形码检测在现实场景中的应用,于是,便想着实现一波,并且对程序中的一些问题做了一些修改. 首先要确定调用的包 ...

  6. python+opencv人脸识别-图片处理+代码

    首先安装opencv: cmd 然后输入:install opencv-python 刚接触人脸识别,正在学习:代码是从绘制图片到人脸识别,里面的jpg图片找个有一个人脸图片就行,放在项目的根目录下就 ...

  7. Python+OpenCV检测灯光亮点

    本篇博文分享一篇寻找图像中灯光亮点(图像中最亮点)的教程,例如,检测图像中五个灯光的亮点并标记,项目效果如下所示: 第1步:导入并打开原图像,实现代码如下所示: # import the necess ...

  8. Python+opencv裁剪/截取图片的几种方式

    文章目录 前言 一.手动单张裁剪/截取 二.根据图片的位置坐标进行裁剪/截取 三.根据xml文件截取/裁剪目标 四.opencv获取边缘并根据bounding box截取/裁剪目标 五.用YOLO目标 ...

  9. python opencv轻松去图片水印

    背景 最近有一个需要为图片去水印的需求,于是各种折腾开始. 背景了解图片标准 图片使用RGB编码,RGB色彩模式是工业界的一种颜色标准,是通过对红(R).绿(G).蓝(B)三个颜色通道的变化以及它们相 ...

  10. Python+OpenCV批量给图片加噪声

    利用python和opencv批量给图像加噪声(椒盐噪声.高斯噪声.随机噪声) 导入头文件 import os import cv2 import numpy as np import random ...

最新文章

  1. 去掉警告:PerformSelector may cause a leak because its
  2. 计算机应用培训资料,计算机应用培训资料.doc
  3. 快速记忆python函数-让Python程序快速提升30%的技巧
  4. 苹果降价背后的代工厂之殇
  5. java json.pasent_来自CSV的带有id parent(Python)的JSON树
  6. java设置窗口不可移动_Java – JDialog不可移动
  7. 6工程文件夹作用_data_dragon数据工程小工具收集
  8. AC日记——简单密码 openjudge 1.7 10
  9. 【数学】MORE XOR
  10. php中提取现在的时间函数,php中时间函数date及常用的时间计算
  11. D-Link 修复多个硬编码密码漏洞
  12. easyui源码翻译1.32--Droppable(放置)
  13. Js获取或计算时间的相关操作
  14. VAssistX 常用快捷键
  15. nanodlp micro USB mini USB接线图
  16. 上传航测影像就能土方计算?!0基础倾斜摄影土方计算流程
  17. 构建SaaS化平台产品的建议
  18. 关于Netty中的Recycler对象池
  19. FlexRay AUTOSAR网络管理(AUTOSARFRNM)简介
  20. 【C#】UserControl用法

热门文章

  1. GIS投影、坐标系、坐标系转换
  2. 【WINAPI】CreateSemaphore_信号量
  3. 百度网盘不限速下载方法全解(验证、体会、转载)
  4. uart项目验证(一)-uart协议与uart ip的理解
  5. 【多传感器融合理论】01自动驾驶中常用传感器硬件介绍
  6. 提取gps经纬度信息
  7. 图片放大像素模糊怎么变清晰?
  8. 电商项目——初识电商——第一章——上篇
  9. 计算机网络工程师初级,软考计算机网络的初级和中级有啥区别?直接考中级网络工程师好考吗?计算机软考中级费用高吗...
  10. 限定通配符和非限定通配符_什么是通配符?