目的是从几千张Windows本地图片里面,找出并删除其中的模糊图片
如何量化这个“模糊”程度?
照片原图就没聚焦算模糊吗?
或者你首先得有图片原图,对比原图得出模糊
装个安卓模拟器,然后安卓端有很多这种软件?
很久以前有過同樣的需求
後來放棄,決定用肉眼掃描
關注個
试过这个方法,分辨率筛选不出模糊的图片
目前也是类似,量少的时候连接安卓手机,用手机自带的相册进行筛选;但图片一多就比较麻烦
哈哈我也是在放弃的边缘挣扎,可能得等着出现一个带有AI能力电脑端相册管理软件
如果是jpg,它有质量值(1-100),能不能作为模糊程度?
此质量非彼质量
1 个赞
感谢感谢,不过作为外行 看到代码估计不好搞
如果不涉密,可以发几张模糊和不模糊的示例图片,我用c#写一个测试看看。
那我觉得有点难,模糊程度如何界定是个问题,看以后有没有借助AI实现这个效果的工具。
根据楼上那3行python代码扩写了一下
输入文件夹路径,对文件夹中所有图片进行拉普拉斯算子运算,并在文件名前添加前缀[lvar_*计算结果],然后按文件名升序自己筛选?
不过感觉单独使用拉普拉斯算子不太合理,有些图片结果不太合理,感觉还需要别的算法
import os
import cv2
import numpy as np
import filetype
import re
def getImageVar(image):
# image = cv2.imread(imgPath)
img2gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
imageVar = cv2.Laplacian(img2gray, cv2.CV_64F).var()
return int(imageVar)
def image_read_from_chinese_path(image_file_name):
image_numpy_data = cv2.imdecode(np.fromfile(image_file_name, dtype=np.uint8), -1)
return image_numpy_data
def get_files_list(dirpath: str) -> list:
"""获取指定文件夹中的所有文件路径list
传参: dirpath 文件夹路径str
返回值 filelist 所有文件路径list"""
import os
filelist = []
for dirpath, dirnames, filenames in os.walk(dirpath):
for filename in filenames:
file_path = os.path.normpath(os.path.join(dirpath, filename))
filelist.append(file_path)
return filelist
def add_info_lvar(all_files):
for file in all_files:
if filetype.is_image(file):
try:
parent_folder, filename = os.path.split(file)
num_img = image_read_from_chinese_path(file)
imageVar = getImageVar(num_img)
new_filename = f'[lvar_{imageVar}]' + filename
new_file = os.path.join(parent_folder, new_filename)
os.rename(file, new_file)
print(f'{file} 改名成功')
except:
print(f'{file} 处理失败,已跳过')
def del_info_lvar(all_files):
pattern = '\[lvar_[^\]]+\]'
for file in all_files:
if filetype.is_image(file):
parent_folder, filename = os.path.split(file)
new_filename = re.sub(pattern, '', filename)
new_file = os.path.join(parent_folder, new_filename)
os.rename(file, new_file)
print(f'{file} 改名成功')
def main():
path = input('输入需要处理的文件夹路径:')
all_files = get_files_list(path)
mode = input(
'输入指定数字进行操作:\n1 计算文件夹中的所有图片的拉普拉斯算子,并添加在文件名前添加[lvar_*]\n2 去除文件夹中所有图片前添加的[lvar_*]前缀\n')
if mode == '1':
add_info_lvar(all_files)
elif mode == '2':
del_info_lvar(all_files)
if __name__ == "__main__":
main()
有劳了~传了三十多张照片,样本少的话我再传一些
打包了一下,不过效果真的很差,跟楼上测试结果差不多
边提需求,边问AI,边编代码
这个帖子可以哦,给你们点赞。