Windows端有没有按图片清晰度分类的软件?用来找出模糊图片

目的是从几千张Windows本地图片里面,找出并删除其中的模糊图片

如何量化这个“模糊”程度?
照片原图就没聚焦算模糊吗?
或者你首先得有图片原图,对比原图得出模糊


看分辨率行吗?

装个安卓模拟器,然后安卓端有很多这种软件?

很久以前有過同樣的需求
後來放棄,決定用肉眼掃描

關注個

试过这个方法,分辨率筛选不出模糊的图片

目前也是类似,量少的时候连接安卓手机,用手机自带的相册进行筛选;但图片一多就比较麻烦

哈哈我也是在放弃的边缘挣扎,可能得等着出现一个带有AI能力电脑端相册管理软件

如果是jpg,它有质量值(1-100),能不能作为模糊程度?

此质量非彼质量

1 个赞

可以参考试试
3行代码Python搞定图片清晰度识别,原来我们看到不一定是这样的 - 个人文章 - SegmentFault 思否

感谢感谢,不过作为外行 看到代码估计不好搞

如果不涉密,可以发几张模糊和不模糊的示例图片,我用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该如何使用这段代码 :rofl:

1 个赞

测试了一下效果不理想。可能它检测的是里面细节的多少,而不是实际的清晰程度。
两组里得到的数据差不多。需要更优秀的算法来实现了。

1 个赞

打包了一下,不过效果真的很差,跟楼上测试结果差不多

边提需求,边问AI,边编代码

这个帖子可以哦,给你们点赞。