-2

저는이 질문을하기 전에 파이썬 초보자이며 여기에서 답을 찾기 위해 열심히 노력했습니다. 두 장의 사진이 다른 디자인으로되어 있으며, 해밍 거리를 비교하고 싶습니다. 하지만 같은 폴더에있는 같은 디자인 파일의 이미지를 비교하고 싶지는 않습니다. Imagehash라는 라이브러리를 기반으로 비교를합니다. 이미지의 다른 조합을 비교 한 후에 가장 높은 해밍 거리 점수를 유지하고 싶습니다. 폴더 테이블에서다른 폴더에있는 요소의 조합을 가져 오지만 같은 폴더에있는 요소를 결합하지 않습니다, 파이썬

이 세 가지 이미지가있다 : table_1.jpg, table_2.jpg, 폴더 의자 두 이미지에서 table_3.jpg : chair_1.jpg, chair_2.jpg

나 간단한 예제와 함께 내가 원하는 것을 설명하게

내가 원한다면 Image.open() 및 imagehash.phash 함수를 사용하여 나중에 할 수있는 파일의 파일 경로입니다.

(table_1.jpg, chair_1.jpg), (table_1.jpg, chair_2.jpg), (table_2.jpg, chair_1.jpg), (table_2.jpg, chair_2.jpg), (table_3.jpg, chair_1.jpg), (table_3.jpg, chair_2.jpg) 

가 그럼 난 "_"후 분리해야하고, GROUPBY을 사용하고 itemgetter, 나는 당신이 원하는 튜플 계산 itertools.product 필요

답변

0

추측 : 조합은 다음과 같이한다

from itertools import product 

table = ['table_1.jpg', 'table_2.jpg', 'table_3.jpg'] 
chair = ['chair_1.jpg', 'chair_2.jpg'] 

print(list(product(table, chair))) 
# [('table_1.jpg', 'chair_1.jpg'), ('table_1.jpg', 'chair_2.jpg'), ('table_2.jpg', 'chair_1.jpg'), ('table_2.jpg', 'chair_2.jpg'), ('table_3.jpg', 'chair_1.jpg'), ('table_3.jpg', 'chair_2.jpg')] 

fillenames가 모두 같은 목록에있는 경우 combinations을 사용하고 요소의 시작이 동일하지 않은지 확인하십시오.

from itertools import combinations 
filenames = ['table_1.jpg', 'table_2.jpg', 'table_3.jpg', 'chair_1.jpg', 'chair_2.jpg'] 

print [(x,y) for x,y in combinations(filenames, 2) if x.split('_')[0] != y.split('_')[0]] 
# [('table_1.jpg', 'chair_1.jpg'), ('table_1.jpg', 'chair_2.jpg'), ('table_2.jpg', 'chair_1.jpg'), ('table_2.jpg', 'chair_2.jpg'), ('table_3.jpg', 'chair_1.jpg'), ('table_3.jpg', 'chair_2.jpg')] 
+0

네,하지만 제 질문은 같은 폴더에있는 파일의 조합을 취하지 못하게하는 방법입니다. –

+0

'product'는 같은 목록의 요소를 섞어 쓰지 않습니다. –

+0

x = y 인 경우 x, y 조합 (df [ 'hash_1'], 2)의 경우 = ((x, y, (64 - (x - y))/64) series = (group (key) = itemgetter (0)) 사실, 먼저 phash를 계산 한 다음 파일 이름이 아닌 함수에서 사용합니다. 어떻게 이미지 이름을 hash –