python脚本之如何按照清晰度对图片进行分类(python图像清晰)快来看

随心笔谈2年前发布 admin
197 0 0

文章摘要

这篇文章介绍了一种通过计算图像清晰度的方法,使用拉普拉斯算子来计算边缘,再通过方差来衡量图像的清晰度。文章首先定义了`getImageVar`函数,该函数通过计算图像的方差来评估清晰度,使用`cv2.CV_64F`类型来处理数据溢出问题。接着,文章定义了`get_all_file`函数来读取文件夹中的所有文件路径。在主程序部分,用户可以通过输入指定处理的目标文件夹,并设置清晰度阈值。程序会将目标文件夹中的图像复制到清晰或模糊文件夹,并根据计算的清晰度值进行分类。

import os
import cv2
import shutil
# 计算图片清晰度
def getImageVar(img):
res=0
for i in cv2.split(img):
# 对图片用 3×3 拉普拉斯算子做卷积得到边缘 计算出方差,并最后返回。
# 函数求完导数后会有负值,还有会大于255的值。而原图像是uint8,即8位无符号数,所以建立的图像位数不够,会有截断。因此要使用64位有符号的数据类型,即 cv2.CV_64F。
# 再用var函数求方差
res+=cv2.Laplacian(i, cv2.CV_64F).var()
return res/3
# 读取某个文件夹下面的所有文件名 返回list
def get_all_file(path):
all_file=[]
for i in os.listdir(path):
file_name=os.path.join(path,i)
all_file.append(file_name)
return all_file
input_path=input(“请输出目标文件夹:”)
threshold=int(input(“请输入清晰度阈值:”))
orign_path=os.path.join(os.path.abspath(‘.’),’img’)
resoure_file_path=os.path.join(orign_path, input_path) # 图片所在文件夹
vage_file_path=os.path.join(orign_path,’vague’)
clear_file_path=os.path.join(orign_path,’clear’)
if not os.path.exists(vage_file_path):
os.mkdir(vage_file_path)
if not os.path.exists(clear_file_path):
os.mkdir(clear_file_path)
all_img_path=get_all_file(resoure_file_path)
for img_path in all_img_path:
img_name=img_path.split(‘\\’)[-1]
dst=os.path.join(vage_file_path,img_name)
if getImageVar(cv2.imread(img_path))>threshold:
dst=os.path.join(clear_file_path, img_name)
shutil.copyfile(img_path, dst)

© 版权声明

相关文章