Главная страница
Навигация по странице:

  • КУРСОВ А РОБОТА

  • Записка к курсовой (финал!!!). Методи обробки відеозображень в системах управління з технічним зором


    Скачать 0.98 Mb.
    НазваниеМетоди обробки відеозображень в системах управління з технічним зором
    АнкорOlga A. Berezina, Yelena M. Shpilyuk english for university students
    Дата22.06.2022
    Размер0.98 Mb.
    Формат файлаdocx
    Имя файлаЗаписка к курсовой (финал!!!).docx
    ТипРеферат
    #611096

    Форма № Н-6.01

    Міністерство освіти і науки України
    Національний аерокосмічний університет ім. М.Є. Жуковського

    «Харківський авіаційний інститут»
    Кафедра систем управління літальних апаратів
    КУРСОВА РОБОТА
    з «ООП для мобільних систем»
    (назва дисципліни)
    на тему: «Методи обробки відеозображень в системах управління з технічним зором»

    Студента 2 курсу 322 групи

    Напряму підготовки Інженерія мобільних додатків

    спеціальності 151
    __________________Іващенко М.О.____________

    (прізвище та ініціали)
    Керівник ___________________________

    ____________________________________

    (посада, вчене звання, науковий ступінь, прізвище та ініціали)

    Національна шкала ________________

    Кількість балів: ______ Оцінка: ECTS _____


    Члени комісії:

    ________________ ____________________________

    (підпис) (прізвище та ініціали)

    ________________ ____________________________

    (підпис) (прізвище та ініціали)

    ________________ ____________________________

    (підпис) (прізвище та ініціали


    м. Харків – 2021 рік

    РЕФЕРАТ
    Листів 25, ілюстрацій 6, джерел 4, додатків 3.
    У курсовому проекті була спроектована і створена програма для обробки відеопослідовностей з веб-камери в реальному часі або з відеофайлу. Як результат, була отримана програма, за допомогою якої можна перетворювати зображення. Були розглянуті різні алгоритми для систем управління з технічним зором.
    КЮЧОВІ СЛОВА: технічний зір, OpenCV, геометричні перетворення, відео зображення, фільтр ВЧ.

    ЗМІСТ



    КУРСОВА РОБОТА 1

    ЗМІСТ 3

    Перелік використаних позначень 4

    Вступ 5

    1 Огляд проблеми обробки зображень в системах управління з технічним зором 6

    2 Методи та засоби отримання відеозображень 10

    2.1 Завантаження зображення з файлу 10

    2.2 Захват відео з веб-камери 10

    3 Геометричні перетворення відео-зображень 12

    3.1 Можливості бібліотеки OpenCV з геометричних перетворень 12

    3.2 Метод cv2.warpAffine() для повороту зображення 12

    3.3 Метод cv2.warpAffine() для розтягування зображення 12

    3.4 Реалізація на Python й аналіз результатів 12

    4 Кольорові перетворення відео-зображень 14

    4.1 Можливості бібліотеки OpenCV з кольорових перетворень 14

    4.2 Метод cv2.cvtColor() для перетворення кольорового простору 14

    4.3 Метод filter2D() для фільтрації ВЧ 15

    4.4 Реалізація на Python й аналіз результатів 15

    Висновки 16

    ДОДАТОК А 18

    ДОДАТОК Б 20

    Додаток В 23


    Перелік використаних позначень



    ТЗ – технічний зір;

    ПЗ – програмне забезпечення;

    OpenCV – бібліотека комп'ютерного зору з відкритим кодом.

    CV - модуль обробки зображень і комп'ютерного зору

    ВЧ – високі частоти

    Python - мова програмування високого рівня

    mp4 - відеоформат

    avi - відеоформат

    Вступ



    Системи зору тепер вважаються невід’ємною частиною багатьох промислових процесів, тому що вони можуть пропонувати швидкі, точно відтворені можливості контролю. Наприклад, у харчовій промисловості, де система технічного зору відіграє вирішальну роль у процесах, коли швидкість і точність надзвичайно важливі і допомагають забезпечити конкурентну перевагу для виробників. Сам харчовий продукт перевіряється на предмет контролю і якості порцій, а також на якість упаковки і маркування. Крім того, на фармацевтичному ринку потрібні найвимогливіші системи бачення, які не тільки перевіряють продукти, але також перевіряють використання та налаштування систем, забезпечуючи правильне дозування і контроль за процесами виготовлення ліків. Області застосування методів цифрової обробки в наш час значно розширюються, витісняючи аналогові методи обробки сигналів зображень. Методи цифрової обробки широко застосовуються в промисловості, мистецтві, медицині, космосі. Вони застосовуються при керуванні процесами, автоматизації виявлення об'єктів, розпізнаванні образів і в багатьох інших. Автоматичний аналіз у системах дистанційного спостереження широко застосовується при аналізі місцевості, у лісовому господарстві, наприклад, для автоматичного підрахунку площі вирубок, у сільському господарстві для спостереження за дозріванням урожаю, у розвідці, у системах протипожежної безпеки. Контроль якості виробленої продукції виконується завдяки автоматичним методам аналізу сцен.

    У даній роботі мною було розпочато вивчення технологій комп'ютерного зору на прикладі створення порівняно простої програми для обробки відеопотоку з веб-камери. Основою для розробки послужила бібліотека OpenCV з відкритим вихідним кодом.

    1 Огляд проблеми обробки зображень
    в системах управління з технічним зором


    Для обробки відеоінформації використовують, в більшій частині, процесори, з якими звикли працювати в офісах, а при недостачі продуктивності процесора беруть процесор з більшою продуктивністю. Відеокамера і процесор не інтегруються в одному пристрої, що приводить до передачі значних масивів інформації між ними.

    Потенційна оцінка відбиває методи і засоби знімання зображень за допомогою традиційних відеокамер і використовується при розрахунку необхідної пропускної здатності каналів зв’язку для передачі зображення, об’єму пам’яті для збереження зображення і продуктивності обчислювальних засобів для його обробки.

    Послідовний процес уведення кадру зображення, а потім його оброблення, приводять до затримки інформації в контурі зворотного зв’язку як сума часу виконання цих двох процесів, навіть при виконанні їх у конвеєрі (уведення поточного кадру зображення та обробка попереднього).

    При розв’язанні практичних задач традиційно використовуються статичні моделі, які не враховують знання, отримані на попередньому кадрі, що приводить до втрати ефективності.

    Для швидкого пошуку об’єкта в зображенні використовуються механізми уваги , які базуються на принципах ієрархічної або пірамідальної організації зорового аналізатора людини, для чого найбільш часто використовують піраміди Лапласа або Гауса.

    При цьому спочатку зчитується з відеосенсора повне зображення сцени, яке потім згладжується та проріджується, в 4 рази зменшуючи об’єм інформації.

    Процедура повторюється декілька разів, приводячи до грубого представлення зображення, на якому значно простіше проводити пошук об’єкта за заданими параметрами.

    Така процедура спочатку була розроблена для стиснення інформації при необхідності передачі зображення і дійсно забезпечувала значне стиснення зображення та можливість відновлення повного зображення.

    Потім ця процедура, без достатнього аналізу, була використана для швидкого пошуку об’єктів, але в системах реального часу вона, вимагаючи значної обробки інформації, приводить до додаткових затримок інформації в контурі зворотного зв’язку.

    Крім того ця процедура не відповідає процесам сприйняття зображень у зоровому аналізаторі людини.

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

    Для оптимізації процесів уведення, сприйняття та обробки зображень як прототипу розглядається зоровий аналізатор людини, який вдосконалювався протягом тисячоліть існування людства. Аналіз зорового аналізатора людини дозволив виділити близько 300 його функцій, конструктивних (структурних) та фізичних особливостей будови, механізмів та процесів, які відбуваються в зоровій системі.

    Найбільш важливими з них для забезпечення високих вимог реального часу є наступні:

    – висока вибірковість зорового аналізатора,

    – механізми уваги та адаптації,

    – суміщення процесів уведення і обробки зображень,

    – спеціалізація нейронів на кожному рівні на виконання специфічних функцій,

    – широке розпаралелювання нейронної мережі для багаторівневого сприйняття відеоінформації.

    Висока вибірковість зорового аналізатора базується на широкому полі огляду периферійного зору з невисокою роздільною здатністю, яке реалізує функції збудження та спрямування погляду (механізм уваги) і концентрації роздільної здатності в зоні ямки сітківки ока, яка служить як деякий зонд для дослідження зовнішнього світу. Високорівневе управління рухами очей визначається поставленою задачею (пошук, розглядання, стеження, розпізнавання тощо) та забезпечує розв’язання цих задач.

    У залежності від динаміки процесів, які спостерігає зорова система людини, від рівня освітлення, необхідності розглядання великих або мілких деталей в зображенні, діють адаптаційні механізми, що управляють типами рухів очей, їх швидкістю, чутливістю рецепторів тощо. Тому і в системах технічного зору також доцільно управляти частотою зчитування відеоінформації, коефіцієнтом підсилення та розрядністю її подання.

    Таким чином, для реалізації інтелектуального вибіркового сприйняття зображень необхідно забезпечити наступні можливості :

    – управління роздільною здатністю по простору;

    – зчитування довільної прямокутної ділянки зображення;

    – виділення динамічної інформації;

    – управління розрядністю яскравості або колірності;

    – управління частотою відеозйомки.

    В залежності від поставленої перед системою технічного зору задачею можна виділити ряд типових режимів або етапів, які по аналогії пов’язані з рухами очей та особливостями сприйняття відеоінформації зоровим аналізатором людини:

    – пошук об’єкта за ознаками;

    – розглядання (розпізнавання, порівняння, вимірювання) об’єкта;

    – слідкування за об’єктом;

    – панорамування сцени.

    Можливість управління параметрами зчитування інформації з відеосенсора може бути ефективно використана при реалізації стратегії «механізмів уваги» яка базується на швидкому, грубому аналізі статичного або динамічного зображення, з послідуючим детальним аналізом знайденого об’єкта з метою виділення яких-небудь характерних інформаційних ознак: яскравісних, колірних, динамічних, геометричних (меж областей, горизонтальних та вертикальних ліній, кутів тощо). Стратегія є адаптивною, тобто пристосовується до статистики ознак зображення та дозволяє значно зменшити загальний обсяг обчислень.

    Важливим моментом для забезпечення оперативної роботи в реальному часі є суміщення процесів уведення та оброблення інформації. Для цього необхідно замінити покадрове уведення зображення, уведенням його меншими порціями, наприклад, порядково. Тут можна використати декілька каналів прямого доступу до пам’яті, один з яких забезпечить надходження нових порцій інформації з відеосенсора, а другий – зчитування попередніх порцій для оброблення на процесорі. При цьому процесор в значній мірі звільняється від процесів уведення і ефективно використовується для оброблення інформації.


    2 Методи та засоби отримання відеозображень

    2.1 Завантаження зображення з файлу


    Метод cv2.VideoCapture() завантажує зображення із зазначеного файлу або зчитує з відеокамери, якщо вказується шлях к файлу (відносний або абсолютний), або індекс подключеної відеокамери.

    Приклад коду:

    capture = cv2.VideoCapture('Video.mp4')
    Примітка. Зображення повинно знаходитись у робочому каталозі або слід вказати повний шлях зображення.

    Процедура читання відео досить проста, оскільки OpenCV автоматично підтримує різні формати відеоданих (mp4, avi та ін.). Для забезпечення різних варіантів читання використовується об'єкт модуля VideoCapture(), де в якості аргументу використовується ім'я файлу.

    2.2 Захват відео з веб-камери


    При користуванні cv2.VideoCapture() може отримати відео з веб-камери персонального комп'ютера, відеокамер з USB підключенням. Для забезпечення різних варіантів читання використовується об'єкт модуля VideoCapture(), де в якості аргументу використовується ціле число. Цілочисельний аргумент цього модуля є ідентфікатором підключеної до комп'ютера камери.

    Приклад коду для захоплення відео з web-камери і вікно перегляду відеоданих:

    cap = cv2.VideoCapture(0)

    while(cap.isOpened()):

    ret, frame = cap.read()

    if ret == True:
    cv2.imshow('frame', frame)
    if cv2.waitKey(20) & 0xFF == ord('q'):

    break

    else:

    break

    cap.release()

    cv2.destroyAllWindows()

    У цьому коді використовуються функції cap = cv2.VideoCapture (0) і read (). Останнє повертає кадри відео і контролює успішність читання кадру (логічне значення істинно (value is true) в разі, якщо кадр був успішно прочитаний, і невірно (value is false) в іншому випадку.

    Цикл читання відеоданих в цьому коді ret, frame = cap.read () триватиме до тих пір, поки не відбудеться натискання клавіші "q" на клавіатурі - це перерве процедуру відеозахвату. Ця дія в програмі відображається умовою 0xFF == ord('q').


    3 Геометричні перетворення відео-зображень

    3.1 Можливості бібліотеки OpenCV з геометричних перетворень


    OpenCV написана на мові високого рівня і містить алгоритми для: інтерпретації зображень, калібрування камери за зразком, усунення оптичних спотворень, визначення подібності, аналіз переміщення об'єкта, визначення форми об'єкту та стеження за об'єктом, 3D-реконструкція, сегментація об'єкта, розпізнавання жестів і т.д. Таким чином можна здогадатися, що можливості бібліотеки OpenCV з геометричних перетворень дуже великі, і тому їх, звісно, вистачить на виконання проекту.

    3.2 Метод cv2.warpAffine() для повороту зображення


    Щоб повернуть зображення ми зчитуем розмір зображення, далі ми вносимо зміни в матрицю функцією cv2.getRotationMatrix2D(). Щоб відобразити вже перетворене зображення ми використовуємо функцію cv2.warpAffine().

    3.3 Метод cv2.warpAffine() для розтягування зображення


    Щоб розтянути зображення спочатку потрібно створити матрицю np.float32(), де вказуються такі параметри, як нові координати зображення, а також величина розтягування. Потім ця матриця передаеться як параметр у функцію cv2.warpAffine() де відбувається фінальна обробка.

    3.4 Реалізація на Python й аналіз результатів


    Поворот

    image_center = tuple(np.array(frame.shape[1::-1]) / 2)

    rot_mat = cv2.getRotationMatrix2D(image_center, 30, 1)

    frame = cv2.warpAffine(frame, rot_mat, frame.shape[1::-1], flags=cv2.INTER_LINEAR)

    Розтягування
    translation_matrix = np.float32([[2,0,-frame.shape[1]*0.5],[0,1,0]])

    frame = cv2.warpAffine(frame, translation_matrix,(frame.shape[1], frame.shape[0]))

    Отримуємо розміри зображення через атрибут shape висоту і ширину вікна. Далі ми обчислюємо середину картинки для передачі її в матрицю обертання, для цього просто ділимо числа на 2.

    Зчитуємо матрицю для перетворення. В даному випадку ми скористалися методом cv2.getRotationMatrix2D(), який може використовуватися як для повороту зображення, так і для зміни його розмірів. Даний метод приймає три аргументи - перший це кортеж з точкою, щодо якої буде здійснено поворот зображення і зміна розміру. Другий аргумент - кут повороту, в градусах. І третій аргумент - коефіцієнт збільшення, який може бути і менше 1. Метод повертає матрицю повороту, яка може використовуватися в необхідних випадках.

    Для розтягування отримуємо матрицю за допомогою np.float32 де першим параметром вказуємо кінцевий масштаб розтягування (щоб отримати зображення без змін потрібно вказати "1"). Якщо ми хочемо розтягнути зображення по вісі Y, то потрібно вказати масштаб п'ятим параметром. Далі вказуємо третім параметром нові координати зображення. Потрібно пам'ятати, що якщо ми розтягуємо зображення у 2 рази, то зображення повинно бути здвинуто величину, що дорінює половині від його ширини вліво, якщо у 3, то на величину, що дорівнює ширині і так далі. Якщо ми хочемо розтягнути зображення по вісі Y, то потрібно вказати координату шестим параметром.

    Далі використовуємо метод cv2.warpAffine(), який приймає чотири параметри - вхідне зображення, матрицю перетворення, матріцю з розмірами вихідного зображення, а також метод інтерполяції за бажанням.

    4 Кольорові перетворення відео-зображень

    4.1 Можливості бібліотеки OpenCV з кольорових перетворень


    OpenCV надає більше 150 колірних моделей. За замовчуванням OpenCV використовує BGR, але на сьогоднішній день найпопулярнішою колірною моделлю є RGB, при якому колір на екрані монітора формується при об'єднанні променів трьох основних кольорів - червоного, зеленого і синього. Але в світі технічного зору існує набагато більше колірних моделей. Ось деякі з них:

    HSV - Дане відображення створено для спрощення уявлення кольору людиною. Люди в разі опису кольору рідко користуються компонентами кольору, зазвичай вони застосовують такі слова як відтінок (HUE), насиченість (SATURATION) і інтенсивність (VALUE) кольору.

    XYZ – Дана модель була виведена в лабораторії CIE для того, щоб описати всі кольори, які може бачити очей людини. Компоненти X, Y, Z в даній моделі описують чутливість середньостатистичного спостерігача, в загальному вигляді вони представляють допрацьовані R, G, B компоненти.

    GRAY – Чорно-білий простір, де яскравість розраховується як середня яскравість всіх трьох компонент моделі BGR.

    YUV – Дана схема прийшла з телебачення, де компонента Y - значення яскравості, а UV - двох колiрнорiзностних сигналів.

    4.2 Метод cv2.cvtColor() для перетворення кольорового простору


    Синтаксис:

    cv2.cvtColor(src, code[, dst[, dstCn]])
    Параметри:

    1. src – вхідне зображення.

    2. code –  код перетворення кольорового простору.

    3) dst – вихідне зображення такого ж розміру і глибини, як зображення src. Це необов'язковий параметр.

    4) dstCn – кількість каналів у зображенні призначення. Якщо параметр дорівнює 0, то кількість каналів виводиться автоматично з src та коду. Це необов'язковий параметр.

    4.3 Метод filter2D() для фільтрації ВЧ


    Якщо зображення має нечіткі границі (низьку різкість), то його можна відфільтрувати ВЧ фільтром, який підкреслить перепади яскравості на зображенні и зробить його більш чітким. Для ВЧ зазвичай використовують такі типові ядра:



    Норміровка необхідна для того, щоб привести значенні отклику фільтру до діапазону вхідних даних. Нормуючий коефіцієнт визначається з умови рівності одиниць суми всіх коефіцієнтів фільтру.

    Для цього потрібно спочатку створити ядро за допомогою функції np.array()а потім передати його в функцію cv2.filter2D().

    4.4 Реалізація на Python й аналіз результатів


    Зміна кольорового простору

    xyz_frame = cv2.cvtColor(frame, cv2.COLOR_RGB2XYZ)

    Фільтр ВЧ

    kernel_3x3 = np.array([[-1,-1,-1], [-1, 9,-1], [-1,-1,-1]])

    frame = cv2.filter2D(frame, -1, kernel_3x3)

    В даному прикладі зчитується відеозображення і записується в змінну frame, після чого воно перетворюється в XYZ за допомогою прапора cv2.COLOR_RGB2XYZ.

    Якщо ми говоримо про обробку фільтром ВЧ, то там ми виконали обробку за допомогою функції cv2.filter2D() якому передавали вхідне зображення, глибину, а також задане ядро.


    Висновки


    В результаті виконання роботи була здійснена розробка програми обробки відео зображень в системах управління. Було проаналізовано методи та технології для обробки відео зображень в системах управління. Розглянуто принципи роботи алгоритмів.

    Детально розглянуто засоби і платформи для обробки зображення та пакетів комп’ютерного зору. Наведено практичні результати по роботі з обробки відео зображень в системах управління. Проаналізовано ефективність використання бібліотеки OpenCV.

    Для обробки зображень та використання технологій комп’ютерного зору: геометричного перетворення, кольорового перетворення та фільтрації відео зображень застосовувалась бібліотека OpenCV. Тестування програми відбувалося при різних параметрах відео зйомки.

    Отже, розвиток і тенденції в області комп’ютерного зору знаходять застосування в багатьох сферах. А саме визначення і відстеження об’єктів, дає змогу аналізувати об’єкти для подальшої роботи з цими даними в залежності від використання.

    ПЕРЕЛІК ВИКОРИСТАНИХ ДЖЕРЕЛ


    1. Электронный ресурс: https://drive.google.com/file/d/1nPpIP0e_K2ied57ThGm5QOqbMnoJ3WC8/view?usp=sharing - Компьютерное зрение Pythom + OpenCV.

    2. ­­­­­­­­­­­­­­­­­­ Цифровая обработка 2D- и 3D-изображений: учеб. пособие. / Н. Н. Красильников - СПб.: БХВ-Петербург, 2011. - 608 с.: ил.

    3. Электронный ресурс: http://recog.ru - Распознавание образов с использованием OpenCV

    4. Буэно, Суарес, Эспиноса. Обработка изображений с помощью OpenCV = Learning Image Processing with OpenCV. - М.: ДМК-Пресс, 2016. - 210 с. - ISBN 978-5-97060-387-1

    ДОДАТОК А


    UML діаграми


    Рисунок А.1 – Діаграма класів ПЗ



    Рисунок А.2 – Діаграма активності

    ДОДАТОК Б


    ЛІСТІНГ КОДУ

    import cv2

    from tkinter import *

    from tkinter.filedialog import askopenfile, asksaveasfile

    from PIL import Image, ImageTk

    import numpy as np

    from tkinter import messagebox
    #создание класса

    class Application(Frame):

    def __init__(self,root):

    super(Application,self).__init__(root)

    self.root=root

    self.root['bg'] = '#EDF7FF'

    self.delay=5

    self.source=False

    self.canvas_width=400

    self.canvas_hight=240

    self.rotation=False

    self.f_hf=False

    self.color=False

    self.wide=False


    self.canvas = Canvas(root, width=self.canvas_width, height=self.canvas_hight, bg='#B1DCFF')

    self.canvas2 = Canvas(root, width=self.canvas_width, height=self.canvas_hight, bg='#B1DCFF')
    img1 = Image.open('devka1.gif')

    img1 = img1.resize((400, 240))

    self.img_tk1 = ImageTk.PhotoImage(image=img1)

    self.canvas.create_image(400 // 2, 240 // 2, image=self.img_tk1)
    img2 = Image.open('devka2.gif')

    img2 = img2.resize((400, 240))

    self.img_tk2 = ImageTk.PhotoImage(img2)

    self.canvas2.create_image(400 // 2, 240 // 2, image=self.img_tk2)
    self.wigets()
    def wigets(self):

    #создание кнопок

    self.but1=Button(text='Поворот', height=2, width=20, font=('Calibri', 10, 'bold'), command=lambda:self.reverve_value('rotation'))

    self.but2=Button(text='Фильтр ВЧ', height=2, width=20, font=('Calibri', 10, 'bold'), command=lambda:self.reverve_value('f_hf'))

    self.but3=Button(text='XYZ', height=2, width=20,font=('Calibri', 10, 'bold'), command=lambda:self.reverve_value('color'))

    self.but4=Button(text='Растяжение', height=2, width=20, font=('Calibri', 10, 'bold'), command=lambda:self.reverve_value('wide'))
    self.butfile=Button(text='Открыть файл', height=2, width=20, font=('Calibri', 10, 'bold'),command=self.from_file, bg = '#d3b19c')

    self.butcam=Button(text='Включить веб-камеру', height=2, width=20,font=('Calibri', 10, 'bold'), command=self.from_cam, bg = '#d3b19c')

    self.wide_var=Scale(root, from_=0, to=5, orient=HORIZONTAL,resolution=0.1,troughcolor='#d3b19c', length=145)

    self.rot_en =Scale(root, from_=0, to=359, orient=HORIZONTAL,resolution=1,troughcolor='#38A7FF', length=145)


    #расположение элементов

    self.canvas.place(x='440', y='20')

    self.canvas2.place(x='20', y='20')
    self.but1.place(x='20',y='460')

    self.but2.place(x='240',y='460')

    self.but3.place(x='460',y='460')

    self.but4.place(x='680',y='460')
    self.rot_en.place(x='20',y='400')

    self.wide_var.place(x='680', y='400')
    self.butfile.place(x='270',y='300')

    self.butcam.place(x='440', y='300')

    #функции переворачивания

    def reverve_color(self, mode):

    print('mode ', mode)

    def reverve_value(self, x):

    setattr(self, x, not getattr(self, x))
    #начало оброботки

    def start_stream(self):

    if self.rotation: self.but1.configure(bg='#de3c47')

    else: self.but1.configure(bg='#38A7FF')

    if self.f_hf: self.but2.configure(bg='#de3c47')

    else: self.but2.configure(bg='#38A7FF')

    if self.color: self.but3.configure(bg='#de3c47')

    else: self.but3.configure(bg='#38A7FF')

    if self.wide: self.but4.configure(bg='#de3c47')

    else: self.but4.configure(bg='#38A7FF')
    self.ret, self.frame = self.capture.read()

    self.default_frame=self.frame

    self.default_frame=cv2.cvtColor(self.default_frame, cv2.COLOR_BGR2RGB)

    self.frame=cv2.cvtColor(self.frame, cv2.COLOR_BGR2RGB)
    if self.ret:

    if self.rotation: #поворот

    image_center = tuple(np.array(self.frame.shape[1::-1]) / 2)

    rot_mat = cv2.getRotationMatrix2D(image_center, self.rot_en.get(), 1)

    self.frame = cv2.warpAffine(self.frame, rot_mat, self.frame.shape[1::-1], flags=cv2.INTER_LINEAR)

    if self.f_hf: #фильтр высоких частот

    kernel_3x3 = np.array([[-1,-1,-1], [-1, 9,-1], [-1,-1,-1]])

    self.frame = cv2.filter2D(self.frame, -1, kernel_3x3)

    if self.color: #переход в цветовое пространство XYZ

    self.frame = cv2.cvtColor(self.frame, cv2.COLOR_RGB2XYZ)

    if self.wide: #растяжение

    translation_matrix = np.float32([[self.wide_var.get()+1,0,-self.frame.shape[1]*(0.5*(self.wide_var.get()))],[0,1,0]])

    self.frame = cv2.warpAffine(self.frame, translation_matrix, (self.frame.shape[1],self.frame.shape[0]))
    self.frame=cv2.resize(self.frame, (self.canvas_width, self.canvas_hight))

    self.default_frame=cv2.resize(self.default_frame, (self.canvas_width, self.canvas_hight))

    self.photo = ImageTk.PhotoImage(image=Image.fromarray(self.frame))

    self.photo2 = ImageTk.PhotoImage(image=Image.fromarray(self.default_frame))

    self.canvas.create_image(1,1, image=self.photo, anchor="nw")

    self.canvas2.create_image(1,1, image=self.photo2, anchor="nw")

    self.root.update()

    self.root.after(self.delay, self.start_stream)
    def from_file(self): #открытие видео из файла

    if self.source:

    self.capture.release()

    self.reverve_value('source')

    fopen = askopenfile(mode='r', defaultextension=".mp4", filetypes=(

    ("Video files", ".mp4"),

    ("All files", ".*") ))

    if fopen is None:

    return

    else:

    self.capture = cv2.VideoCapture(fopen.name)

    if not self.capture.isOpened():

    print("Ошибка")

    else:

    self.reverve_value('source')

    self.start_stream()


    def from_cam(self): #считывание с камеры

    if self.source:

    self.capture.release()

    self.reverve_value('source')

    self.capture = cv2.VideoCapture(0)

    if not self.capture.isOpened():

    print("Ошибка")

    else:

    self.reverve_value('source')

    self.start_stream()

    root = Tk()

    root.title("Ivashchenko322")

    root.geometry('860x530')

    root.resizable(False, False) # блокирование размеров окна

    app = Application(root)

    root.mainloop()

    Додаток В


    Екранні форми роботи додатка



    Рисунок В.1 – Основне вікно програми



    Рисунок В.2 – Вікно програми для додатка з поворотом


    Рисунок В.3 – Вікно програми для додатка з розтягуванням


    Рисунок В.4 – Вікно програми для додатка з кольоровим простором XYZ



    Рисунок В.5 – Вікно програми для додатка з фільтром ВЧ



    Рисунок В.6 – Вікно програми із застосуванням усіх фільтрів.


    написать администратору сайта