Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> список структур 
:(
    Опции темы
mrgloom
Дата 13.3.2013, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



написал такой код

Код

def get_best_n(img_path, db_dir,n=10,types = ('*.jpg','*.tif','*.png')):
    os.chdir(db_dir)
    
    files_grabbed = []
    for files in types:
        files_grabbed.extend(glob.glob(files))
    
    hist_list=[]
    for names in files_grabbed:
        full_path= db_dir+'\\'+names
        src = cv.LoadImage(full_path, cv.CV_LOAD_IMAGE_COLOR)
        hist_list.append(compute_histogram_rgb(src))
    
    score_list=[]
    img= cv.LoadImage(img_path, cv.CV_LOAD_IMAGE_COLOR)
    hist= compute_histogram_rgb(img)
    for h in hist_list:
        score_list.append(cv.CompareHist(hist, h, cv.CV_COMP_CORREL))
    score_list.sort()
    return score_list



мне необходимо как то вместе соединить имена изображений из files_grabbed и score_list, т.е. получиться список структур(?), а потом отсортировать по score_list и взять первые n и вывести их имена.
PM MAIL   Вверх
Backward
Дата 14.3.2013, 02:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 5.6.2007

Репутация: 2
Всего: 2



Для группировки списков есть функция 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]


Это сообщение отредактировал(а) Backward - 14.3.2013, 02:49
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0388 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.