유사한 사진 찾아주는 Python 코드OpenCV/OpenCV 강좌2023. 10. 13. 22:49
Table of Contents
반응형
유사하거나 중복 사진을 찾아주는 파이썬 예제 코드입니다.
아래 링크에 있는 코드를 수정하여 사용했습니다.
https://github.com/cw-somil/Duplicate-Remover
2022. 11. 16 최초작성
from PIL import Image import imagehash import cv2 import os import numpy as np class DuplicateRemover: def __init__(self, hash_size = 256, similarity= 80): self.hash_size = hash_size self.similarity = similarity def get_hash(self, filename): img = cv2.imread(filename) img = img[:,:,:3] # discard alpha channel img = Image.fromarray(img) temp_hash_TF = imagehash.average_hash(img, self.hash_size).hash return [filename, temp_hash_TF] def find_duplicates1(self, dirname, filename): fnames = os.listdir(dirname) print("Finding Duplicates Now!\n") threshold = 1 - self.similarity/100 diff_limit = int(threshold*(self.hash_size**2)) print('diff_limit', diff_limit) list_item = [] for image in fnames: f = os.path.join(dirname,image) item = self.get_hash(f) list_item.append(item) new_item = self.get_hash(filename) found = None for item in list_item: diff = np.count_nonzero( item[1] != new_item[1]) if diff <= diff_limit: found = [item, diff] break if found != None: print("Duplicate {} \nfound for Image {}! {}\n".format(found[0][0], new_item[0], found[1])) def find_duplicates2(self, dirname): fnames = os.listdir(dirname) list_item = [] list_duplicate = [] print("Finding Duplicates Now!\n") threshold = 1 - self.similarity/100 diff_limit = int(threshold*(self.hash_size**2)) print('diff_limit', diff_limit) for image in fnames: f = os.path.join(dirname,image) new_item = self.get_hash(f) found= None for item in list_item: diff = np.count_nonzero(item[1] != new_item[1]) if diff <= diff_limit: found = [item, diff] break if found != None: print("Duplicate {} \nfound for Image {}! {}\n".format(found[0][0], new_item[0], found[1])) list_duplicate.append(found) else: list_item.append(new_item) dr = DuplicateRemover(similarity=85) # dirname1 경로에 filename1과 유사한 사진이 있는지 체크합니다. dirname1 = "./test copy" filename1 = './test copy/rabbit1.jpg' dr.find_duplicates1(dirname1, filename1) print('-'*80) # dirname2 경로에 유사한 사진이 있는지 체크합니다. dirname2 = "./test" dr.find_duplicates2(dirname2) |
반응형
'OpenCV > OpenCV 강좌' 카테고리의 다른 글
OpenCV 빌드 정보 확인하기 (0) | 2023.10.14 |
---|---|
CLAHE OpenCV Python 예제 코드 (0) | 2023.10.13 |
이미지에서 텍스트 영역을 찾아주는 OpenCV Python의 MSER 예제 (0) | 2023.10.13 |
OpenCV Python - webcam에서 가져온 영상을 mp4로 저장하는 예제 (0) | 2023.10.13 |
OpenCV Python 강좌 – Perspective Transformation (0) | 2023.10.12 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
@webnautes :: 멈춤보단 천천히라도
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!