Для группировки списков есть функция zip.
| Код | from operator import itemgetter ... def get_best_n(img_path, db_dir,n=10,types = ('*.jpg','*.tif','*.png')): ... return sorted(zip(files_grabbed, score_list), key=itemgetter(1))
|
По поводу кода: как-то у Вас все слишком прямолинейно и ресурсоемко Предлагаю такой вариант:
| Код | import fnmatch, os, re from itertools import * from operator import itemgetter
def locate(pattern="*.*", root=os.curdir, recursive=True): if isinstance(pattern, str): pattern = pattern.split(";") pattern = re.compile("|".join(map(fnmatch.translate, pattern)), re.I).match
root = os.path.abspath(root)
if recursive: for path, dirs, files in os.walk(root): for filename in ifilter(pattern, files): yield os.path.join(path, filename) else: for filename in ifilter(pattern, os.listdir(root)): yield os.path.join(root, filename)
def compare_hist(standard, img_files): img= cv.LoadImage(standard, cv.CV_LOAD_IMAGE_COLOR) standard = compute_histogram_rgb(img)
for path in img_files: img = cv.LoadImage(path, cv.CV_LOAD_IMAGE_COLOR) hist = compute_histogram_rgb(img) yield path, cv.CompareHist(standard, hist, cv.CV_COMP_CORREL)
def get_best_n(img_path, db_dir, n=10, types = ('*.jpg','*.tif','*.png')): score = compare_hist(img_path, locate(types, db_dir)) return sorted(score, key=itemgetter(1))[:n]
|
|