检测图片是否模糊有很多方法(这篇文章review了36种),比如FFT和variation of Laplacian等,前者在操作到时候需要定义高频的量有多低和多高来区分图片是模糊的,操作起来比较麻烦;而后者可以输出一个浮点数来代表图片的模糊程度。

这里我们用的方法为Pech-Pacheco在2000年提出的Laplacian方法(具体可以查看这篇文章)。Laplacian方法能够进行这项工作的原因是Laplacian算子是用来衡量图片的二阶导,能够强调图片中密度快速变化的区域,也就是边界,故常用于边界检测。在正常图片中边界比较清晰因此方差会比较大;而在模糊图片中包含的边界信息很少,所以方差会较小。

这个方法在opencv中只是一行代码的事:cv2.Laplacian(image, cv2.CV_64F).var()。具体操作为:用图片的1个通道用以下3x3的核进行卷积,然后计算输出的方差,如果方差小于一定值则图片视为模糊。

[[0,  1, 0],
[1, -4, 1],
[0, 1, 1]]

代码:

import cv2

image = "test.jpg"
frame = cv2.imread(image)
img2gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 将图片压缩为单通道的灰度图
# img_resize = cv2.resize(img2gray, (112, 112)) # 为方便与其他图片比较可以将图片resize到同一个大小
score = cv2.Laplacian(img2gray, cv2.CV_64F).var()
print "Laplacian score of given image is ", score
if score > 100: # 这个值可以根据需要自己调节,在我的测试集中100可以满足我的需求。
print "Good image!"
else:
print "Bad image!"

比如这张图片的输出分值为4.337

而这张为153.783

参考

  1. https://www.pyimagesearch.com/2015/09/07/blur-detection-with-opencv/

最新文章

  1. container error log
  2. GZFramework代码生成器插件使用教程
  3. 高性能Linux服务器 第6章 ext3文件系统反删除利器ext3grep extundelete工具恢复rm -rf 误删除的文件
  4. (转)HTML5开发学习(2):本地存储之localStorage 、sessionStorage、globalStorage
  5. 知道Form.Show()和Form.ShowDialog()的区别吗
  6. hadoop错误FATAL org.apache.hadoop.hdfs.server.namenode.NameNode Exception in namenode join java.io.IOException There appears to be a gap in the edit log
  7. 简单粗暴地理解 JavaScript 原型链
  8. CmdParse
  9. PHP按行读取文件 去掉换行符"\n"
  10. HTTP协议6之状态码--转
  11. 团队-student_blog-最终程序
  12. Django 2.x 常用命令
  13. linux上用newman+postman进行自动化测试
  14. python - class类 (一)
  15. win7 java环境变量配置
  16. 多线程Task
  17. 【JS点滴】substring和substr以及slice和splice的用法和区别。
  18. MAC下配置ssh让SourceTree通过秘钥访问远程仓库
  19. TPshop标签
  20. 深入理解JAVA虚拟机阅读笔记2——垃圾回收

热门文章

  1. Android NDK 使用自己的共享库(Import Module)
  2. Spark2.2(三十八):Spark Structured Streaming2.4之前版本使用agg和dropduplication消耗内存比较多的问题(Memory issue with spark structured streaming)调研
  3. mipmap和drawable文件夹的区别
  4. 添加script标签、添加事件
  5. mysql主备配置方法
  6. 对actuator的管理端点进行ip白名单限制(springBoot添加filter)
  7. Jason 和 Java 对象转化示例
  8. 设置tomcat 编译文件位置【转】
  9. iOS开发:一个无限滚动自动播放图片的Demo(Swift语言编码)
  10. MXNET:分类模型