baidu_web/test/i.py

69 lines
2.4 KiB
Python

import os
import cv2
import numpy as np
def calculate_similarity(image1_path, image2_path):
"""
두 이미지 간의 유사도를 계산합니다. 히스토그램 비교 방식 사용.
"""
image1 = cv2.imread(image1_path)
image2 = cv2.imread(image2_path)
if image1 is None or image2 is None:
return None # 이미지가 로드되지 않은 경우
# 이미지를 HSV 색 공간으로 변환
image1_hsv = cv2.cvtColor(image1, cv2.COLOR_BGR2HSV)
image2_hsv = cv2.cvtColor(image2, cv2.COLOR_BGR2HSV)
# 히스토그램 계산
hist1 = cv2.calcHist([image1_hsv], [0, 1], None, [50, 60], [0, 180, 0, 256])
hist2 = cv2.calcHist([image2_hsv], [0, 1], None, [50, 60], [0, 180, 0, 256])
# 히스토그램 정규화
cv2.normalize(hist1, hist1, 0, 1, cv2.NORM_MINMAX)
cv2.normalize(hist2, hist2, 0, 1, cv2.NORM_MINMAX)
# 히스토그램 비교 (코사인 유사도)
similarity = cv2.compareHist(hist1, hist2, cv2.HISTCMP_CORREL)
return similarity
def compare_images(base_dir):
"""
메인 상품과 파생 상품 간의 유사도를 비교합니다.
"""
results = []
# 디렉토리의 파일 목록 가져오기
files = sorted(os.listdir(base_dir))
main_files = [f for f in files if f.endswith('.jpg') and '_' not in f]
derived_files = [f for f in files if f.endswith('.jpg') and '_' in f]
for main_file in main_files:
main_path = os.path.join(base_dir, main_file)
main_prefix = os.path.splitext(main_file)[0]
# 파생 상품 필터링
related_files = [f for f in derived_files if f.startswith(main_prefix + '_')]
if not related_files:
print(f"{main_file}에 대한 파생 상품이 없습니다.")
continue
for related_file in related_files:
related_path = os.path.join(base_dir, related_file)
similarity = calculate_similarity(main_path, related_path)
if similarity is not None:
results.append((main_file, related_file, similarity))
print(f"{main_file}{related_file}의 유사도: {similarity:.2f}")
else:
print(f"{related_file} 또는 {main_file} 이미지를 로드할 수 없습니다.")
return results
if __name__ == "__main__":
base_directory = "./img" # 이미지가 저장된 디렉토리 경로
compare_images(base_directory)