Хобрук: Ваш путь к мастерству в программировании

Трекбар для морфологии изображений в opencv (python)

Итак, моя проблема в том, что когда я иду редактировать фотографию, я не могу получить окончательные настройки с панели управления, чтобы сохранить и обновить изображение.

Я нашел код на github, на котором основан мой код, который находится здесь:

https://github.com/opencv/opencv/blob/master/samples/python/morphology.py

Это просто реализация трекбаров. Он даже не сохраняется между режимами, и окончательное изображение, когда вы выходите из определения функции, вообще не меняется. Поэтому я пробовал другие способы. Вот один из способов, который показался многообещающим:

def nothing(x):
pass

def isOrdered(img, cur_mode):
    str_mode = 'ellipse'
    cv2.namedWindow('edit')
    cv2.createTrackbar('op/size', 'edit', 11, 20, nothing)
    cv2.createTrackbar('iters', 'edit', 1, 10, nothing) 
    while(100):
        cv2.imshow('edit', img)
        k = cv2.waitKey(100) & 0xFF
        if k == 27:
            break
        sz = cv2.getTrackbarPos('op/size', 'edit')
        iters = cv2.getTrackbarPos('iters', 'edit')
        opers = cur_mode.split('/')
        if len(opers) > 1:
            sz = sz - 10
            op = opers[sz > 0]
            sz = abs(sz)
        else:
            op = opers[0]
        sz = sz*2+1

        str_name = 'MORPH_' + str_mode.upper()
        oper_name = 'MORPH_' + op.upper()
        st = cv2.getStructuringElement(getattr(cv2, str_name), (sz, sz))
        res = cv2.morphologyEx(img, getattr(cv2, oper_name), st, iterations=iters)

        draw_str(res, (10, 20), 'mode: ' + cur_mode)
        draw_str(res, (10, 40), 'operation: ' + oper_name)
        draw_str(res, (10, 60), 'structure: ' + str_name)
        draw_str(res, (10, 80), 'ksize: %d  iters: %d' % (sz, iters))
    cv2.destroyAllWindows()
    return(sz, iters, op)


modes = ['erode/dilate', 'open/close', 'blackhat/tophat', 'gradient']
str_mode = 'ellipse'
for cur_mode in modes:
    sz, iters, op = isOrdered(im, cur_mode)
    str_name = 'MORPH_' + str_mode.upper()
    oper_name = 'MORPH_' + op.upper()
    st = cv2.getStructuringElement(getattr(cv2, str_name), (sz, sz))
    im = cv2.morphologyEx(im, getattr(cv2, oper_name), st, iterations=iters)
cv2.imshow('final', im)
cv2.waitKey(0) & 0xFF
cv2.destroyAllWindows()

Таким образом, я не могу обновить изображение, пока я меняю настройки трекбара, чтобы видеть, что он делает, и конечное изображение черное, хотя промежуточные изображения между режимами нет.


Ответы:


1

Сохраните исходный код, измените эти строки.

    res = img.copy()
    while(100):
        #cv2.imshow("edit", img)
        cv2.imshow("edit", res)
23.11.2017
  • Вау, спасибо большое! Я так долго пытался что-то сделать. Я предполагаю, что у меня все еще нет лучшего понимания того, как выполняется код, и, вероятно, поэтому я не мог решить проблему. 24.11.2017
  • Новые материалы

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..