图像筛选去重、去静止

主要使用 structural_similarity 算法判断两张图片的相似度。代码如下:

import numpy as np
from skimage.metrics import structural_similarity as ssim
import cv2 as cv
import os
import shutil
import sys
def compare_ssim(img1, img2):
    # 确保img1和img2是灰度图,如果不是,需要先转换
    if img1.ndim == 3:
        img1 = img1.mean(axis=2)
    if img2.ndim == 3:
        img2 = img2.mean(axis=2)
    (score, diff) = ssim(img1, img2, full=True)
    return score, diff

# 假设 img1 和 img2 是两个 ndarray 图片
# score, diff = compare_ssim(img1, img2)
# print(f"SSIM: {score}, Diff: {diff}")

def extract_number(s):
    return int(''.join(filter(str.isdigit, s)))
# 步骤 3: 使用 sorted() 函数进行排序
#sorted_list = sorted(string_list, key=extract_number)

if __name__ == "__main__":
    # 原始目录 和 抽取保存目录
    img_folder = sys.argv[1]
    save_folder = sys.argv[2]
    os.makedirs(save_folder,exist_ok=True)
    img_list = os.listdir(img_folder)
    img_list.sort(key=extract_number)
    #print(img_list)
    SIZE = 64 #将图像缩放大小
    for id, imgname in enumerate(img_list):
        imgpath = os.path.join(img_folder, imgname)
        img= cv.resize(cv.imread(imgpath,cv.IMREAD_GRAYSCALE),(SIZE, SIZE))
        if id==0:
            base_img = img.copy()
            continue
        else:
            score, diff = compare_ssim(base_img, img)
            judge = np.where(diff < 0.3, 0, 1)  # 大于0.3 认为是相同的块
            ss = judge.sum() / (SIZE * SIZE)
            if ss < 0.4: # 相同块比例低于0.4 才认为图片不相似
                shutil.copy(imgpath, save_folder)
                base_img = img.copy()
                print("copy : {}".format(imgpath))
            else:
                continue

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值