Python图像处理之模糊图像判断

 更新时间:2022年12月05日 11:03:40   作者:夏天是冰红茶  
这篇文章主要为大家详细介绍了Python图像处理中的模糊图像判断的实现,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下

上期回顾

上一次的图像清晰度评价没有成功,主要的原因是那几张图像清晰度评价函数都实际都采用了梯度求解,不同的场景灰度的明暗不同,梯度可能会很大,无法得到一个界定值来判定图像的清晰度,所以这次我打算只对动态模糊的图像进行判断,是否是动态模糊图像。

图像处理:图像清晰度评价

采用Laplace算子的原因

根据我之前的一个调研,在清晰度评价函数当中,我决定采用Laplace算子,因为它所得到的梯度值较小,容易获得一个模糊判断区间,而其他的几种所获得的梯度值较大,相应的误差范围也将更高,而且在opencv当中就集成了Laplace算子,很轻松就能调用,并得到一个很好的结果。

实现的效果

本次将会使用一组模糊图像和一组标准图像获得模糊判定区间(a,b),我们知道梯度值越大,图像越清晰,所以当我们进行测试一张图像时,它所返回的梯度值小于a,则可以说明它是一个模糊的图像,当返回的梯度值大于b时,则可以说明它是一个清晰的图像,而当返回的梯度值落在了a与b之间,我们也将其放在模糊图像当中。

图片素材

我自己采用的是手机拍摄的照片,分辨率都是1280*960,请注意图像的尺寸与场景会影响返回的梯度值,但我们通常采集的数据都是由相机拍摄,尺寸相同,工业上采用道路裂缝检测的场景基本类似,所以有研究的意义。

代码的展示与讲解

import cv2
import os
 
def getPhotopath(paths):
    imgfile = []
    file_list=os.listdir(paths)
    for i in file_list:
        newph=os.path.join(paths,i)
        imgfile.append(newph)
    return imgfile
 
def getImgVar(image):
    imggray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    imageVar = cv2.Laplacian(imggray, cv2.CV_64F).var()
    return imageVar
 
def getTest(imgfile):
    c = []
    for i in imgfile:
        # print(i)
        img=cv2.imread(i)
        image=getImgVar(img)
        # print(image)
        c.append(float(f"{image:.3f}"))
    if 'test' in imgfile[0]:   #对测试集数据进行反转
        c.sort(reverse=True)
    else:
        c.sort()
    return c
 
def getThr():
    a=getTest(imgfile1)
    b=getTest(imgfile2)
    thr=(a[0],b[0])
    # print(thr)
    return thr
 
path1="./test"     #测试的数据集文件夹位置
path2="./Standards"  #标准图的数据文件夹位置
#获取文件下的名称
imgfile1=getPhotopath(path1)
imgfile2=getPhotopath(path2)
 
#获得阈值
minThr,maxThr=getThr()
print(minThr,maxThr)
 
def vagueJudge(image):
    img = cv2.imread(image)
    imgVar = getImgVar(img)
    if imgVar>maxThr:
        cv2.putText(img, f"Not Vague{imgVar:.2f}", (12, 70), cv2.FONT_HERSHEY_PLAIN, 3,
                    (255, 0, 0), 3)
    else:
        cv2.putText(img, f"Vague{imgVar:.2f}", (12, 70), cv2.FONT_HERSHEY_PLAIN, 3,
                    (255, 0, 0), 3)
    cv2.imshow("img",img)
    k=cv2.waitKey(0) & 0xFF
image="./Standards/001.jpg"   #需要进行测试的图片
vagueJudge(image)
getPhotopath函数:获得文件夹下各个图片路径,输入模糊图片的文件夹,输入标准图像的文件夹,存入列表当中。
getImgVar函数:返回图像梯度值。
getTest函数:对每个图像进行了梯度值计算后,存入列表当中,对模糊图像的进行列表序列翻转。
def getThr函数:获得模糊判定区间(a,b)。
vagueJudge函数:对新输入的图像进行模糊判定,只要小于b,就判定为模糊。

效果展示

由于我不想在拍摄新的图片,这里就采用./test文件和./Standards文件的图片。

控制台打印的模糊判定区间:

4.327 65.401

image="./Standards/001.jpg" 

image="./test/01.jpg"

项目资源

GitHub链接

到此这篇关于Python图像处理之模糊图像判断的文章就介绍到这了,更多相关Python模糊图像判断内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解python中@的用法

    详解python中@的用法

    这篇文章主要介绍了python中@的用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • python中关于range()函数反向遍历的几种表达

    python中关于range()函数反向遍历的几种表达

    这篇文章主要介绍了python中关于range()函数反向遍历的几种表达,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • python中import学习备忘笔记

    python中import学习备忘笔记

    python中的import语句是用来导入模块的,在python模块库中有着大量的模块可供使用,要想使用这些文件需要用import语句把指定模块导入到当前程序中。下面这篇文章主要给大家介绍了python中import学习的相关资料,需要的朋友可以参考借鉴。
    2017-01-01
  • python中list,ndarray,Tensor间的转换小结

    python中list,ndarray,Tensor间的转换小结

    数据类型转换是常见的功能,本文主要介绍了python中list,ndarray,Tensor间的转换小结,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • Python信息处理库Talon自动抽取签名信息

    Python信息处理库Talon自动抽取签名信息

    这篇文章主要为大家介绍了Python信息处理库Talon自动抽取签名信息实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • 一文带你学会如何利用Python实现一个三维绘图系统

    一文带你学会如何利用Python实现一个三维绘图系统

    tkinter是Python标准库中自带的GUI工具,使用十分方便,所以本文旨在带大家学会如何将matplotlib嵌入到tkinter中并绘制三维绘图系统,感兴趣的可以了解下
    2023-09-09
  • Python环境Pillow( PIL )图像处理工具使用解析

    Python环境Pillow( PIL )图像处理工具使用解析

    这篇文章主要介绍了Python环境Pillow( PIL )图像处理工具使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Python 获取ftp服务器文件时间的方法

    Python 获取ftp服务器文件时间的方法

    今天小编就为大家分享一篇Python 获取ftp服务器文件时间的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • linux下python抓屏实现方法

    linux下python抓屏实现方法

    这篇文章主要介绍了linux下python抓屏实现方法,涉及Python操作屏幕截取的相关技巧,需要的朋友可以参考下
    2015-05-05
  • 浅谈python中的多态

    浅谈python中的多态

    在面向对象程序设计中,除了封装和继承特性外,多态也是一个非常重要的特性。让具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容(功能)的函数
    2021-06-06

最新评论