python去掉模糊图片
import os
import cv2
import shutil
class item: # (图片, 图片清晰度) 结构体
def __init__(self):
self.name = '' # 图片名称
self.val = 10 # 图片清晰度 也就是 getImageVar(img)
#利用拉普拉斯 利用拉普拉斯算子计算图片的二阶导数,反映图片的边缘信息,同样事物的图片,清晰度高的,相对应的经过拉普拉斯算子滤波后的图片的方差也就越大
def getImageVar(imgPath):
image = cv2.imread(imgPath)
img2gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
imageVar = cv2.Laplacian(img2gray, cv2.CV_64F).var()
return imageVar
if __name__ == "__main__":
src_img_dir = r"E:\photo\images"
move_img_dir = r"E:\photo\images3" #存储移出去的模糊图片
os.makedirs(move_img_dir, exist_ok=True)
img_files = os.listdir(src_img_dir)
print("len(img_files): ", len(img_files))
a_list = []
for i in range(len(img_files)):
img_file_path = os.path.join(src_img_dir, img_files[i])
imageVar = getImageVar(img_file_path)
# print(imageVar)
a = item()
a.val = imageVar
a.name = img_files[i]
a_list.append(a)
print("len(a_list): ", len(a_list))
a_list.sort(key=lambda ita: ita.val, reverse=False) # 对 (图片, 图片清晰度) 结构体 列表 按照 图片清晰度排序, 模糊的放在列表头部, 清晰的放在列表尾部
count = 0
for i in range(int(len(a_list)*0.1)): # 移除最模糊的 %10 的图片
print(a_list[i].name, a_list[i].val)
src_path = os.path.join(src_img_dir, a_list[i].name)
dest_path = os.path.join(move_img_dir, a_list[i].name)
shutil.move(src_path, dest_path)
count += 1
# break
print("count: ", count)