opencv

Основи комп’ютерного бачення

Основи комп’ютерного бачення
Opencv (Open Source Computer Vision Library) - це модуль Python, який використовується для комп'ютерного зору. OpenCV - це безкоштовний модуль з відкритим кодом, що містить сотні алгоритмів для виконання різних завдань. Будь-що: від розпізнавання обличчя до виявлення руху можна зробити за допомогою OpenCV. Однак у цьому посібнику ми розглянемо основи OpenCV.

Спочатку встановимо OpenCV:

pip3 встановити opencv-python

Читання та показ зображень

Перше, що нам потрібно навчитися - це читати та писати зображення. Читання файлу зображення, введення повного шляху до файлу або імені файлу (якщо файл знаходиться в папці python) та додавання прапора здійснюється за допомогою cv2.непрочитаний (). Прапор може приймати значення 1 (для кольорового зображення), 0 (для відтінків сірого) або -1 (для кольорового зображення з каналами). Можна використовувати cv2.функція imshow () для показу зображення; тут передаються два аргументи - назва зображення та зображення, яке потрібно показати. Далі ми використовуємо cv2.функція waitKey () для очікування введення з клавіатури; a 0 для cv2.Функція waitKey (0) передбачає постійний час очікування. З іншого боку, cv2.Функція знищення всіхWindows () закриє вікна.

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

імпорт cv2
image = cv2.imread ('LinuxLogo.jpg ', 1)
cv2.imshow ('зображення', зображення)
cv2.waitKey (0)
cv2.знищитиAllWindows ()

Написати зображення

Ми використовуємо cv2.функція imwrite () для збереження зображення. Ця функція приймає два параметри - ім'я для збереження зображення та зображення, яке ви хочете зберегти.

імпорт cv2
image = cv2.imread ('визначити.jpg ', -1)
cv2.imwrite ('save_image.png ', зображення)

Захоплення відео з веб-камери

Для захоплення відео ми починаємо з ініціалізації cv2.Функція VideoCapture (). Потім ми використовуємо цикл “while” для продовження зйомки відео. Поки користувач не натискає клавішу виходу, ми можемо прочитати кадри та показати їх за допомогою read () та cv2.функція imshow (). Потім ми вводимо клавішу “break” для виходу з циклу; у цьому випадку число 27 є ключем ESC. Якщо користувач натискає клавішу ESC, він виривається з циклу. Вийшовши з циклу, необхідно звільнити захоплення.

імпортувати numpy як np
імпорт cv2
захоплення = cv2.Відеозйомка (0)
while (True):
ret, frame = захоплення.читати ()
cv2.imshow ('кадр', кадр)
якщо cv2.waitKey (1) & 0xFF == 27:
перерва
захоплення.випуск ()
cv2.знищитиAllWindows ()

Відтворення відеофайлу

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

імпортувати numpy як np
імпорт cv2
захоплення = cv2.VideoCapture ("Megamind.avi ")
while (True):
ret, frame = захоплення.читати ()
cv2.imshow ('кадр', кадр)
якщо cv2.waitKey (1) & 0xFF == ord ("s"):
перерва
захоплення.випуск ()
cv2.знищитиAllWindows ()

Збереження відеофайлу

Збереження відеофайлу вимагає трохи більше роботи. Cv2.Функція VideoWriter () приймає в цілому 4 параметри - ім'я вихідного файлу, код FourCC, кількість кадрів в секунду та розмір кадру. Крім того, потрібно вказати код FourCC, який є відеокодеком за допомогою cv2.Функція VideoWriter_fourcc (). Використання захоплення.isOpened (), ми читаємо кадр і записуємо вихідний кадр. Ми також можемо показати кадри за допомогою cv2.функція imshow (). Потім ми використовуємо cv2.waitKey (1) & 0xFF == ord ('s'), щоб встановити клавішу виходу. У цьому випадку, якщо користувач натисне клавішу “s”, він вийде з циклу, а потім відпустить захоплення та вихід і закриє вікна.

імпортувати numpy як np
імпорт cv2
захоплення = cv2.Відеозйомка (0)
fourcc = cv2.VideoWriter_fourcc (* 'XVID')
вихід = cv2.VideoWriter ('вихід.avi ', чотири куб.см, 30.0, (640 480))
в той час як (захоплення.isOpened ()):
ret, frame = захоплення.читати ()
вихід.запис (кадр)
cv2.imshow ('кадр', кадр)
якщо cv2.waitKey (1) & 0xFF == ord ('s'):
перерва
захоплення.випуск ()
вихід.випуск ()
cv2.знищитиAllWindows ()

Малювання ліній, кіл, прямокутників і текстів

Перше, що ми навчимося малювати, це лінія. Щоб провести лінію, ми просто використовуємо cv2.функція line (). Функція бере 5 аргументів - вихідне відео, початкову точку, кінцеву точку, колір та товщину лінії. У наступному випадку ми вирішили намалювати прямокутну межу (складається з 4 рядків):

імпорт cv2
захоплення = cv2.VideoCapture ('vtest.avi ')
Правда:
ret, frame = захоплення.читати ()
width = int (захоплення.отримати (3))
висота = int (захоплення.отримати (4))
рядок1 = cv2.рядок (кадр, (0,0), (0, висота), (255, 255, 255), 10)
рядок2 = cv2.рядок (рядок1, (0, 0), (ширина, 0), (255, 255, 255), 10)
рядок3 = cv2.рядок (рядок2, (0, висота), (ширина, висота), (255, 255, 255), 10)
рядок4 = cv2.рядок (рядок3, (ширина, 0), (ширина, висота), (255, 255, 255), 10)
cv2.imshow ('кадр', рядок4)
якщо cv2.waitKey (40) == ord ('q'):
перерва
захоплення.випуск ()
cv2.знищитиAllWindows ()

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

імпорт cv2
захоплення = cv2.VideoCapture ('vtest.avi ')
Правда:
ret, frame = захоплення.читати ()
width = int (захоплення.отримати (3))
висота = int (захоплення.отримати (4))
прямокутник = cv2.прямокутник (рамка, (150, 15), (650, 550), (0,0,0), 11)
cv2.коло (прямокутник, (250, 250), 60, (0,0,0), 11)
cv2.imshow ('кадр', кадр)
якщо cv2.waitKey (40) == ord ('q'):
перерва
захоплення.випуск ()
cv2.знищитиAllWindows ()

Тепер давайте додамо текст до відео, яке ми маємо. Для цього нам потрібно вказати шрифт; тут ми вибрали cv2.FONT_HERSHEY_SIMPLEX. Після вибору шрифту ми можемо використовувати функцію cv2.putText (), щоб зробити все інше. Cv2.putText () приймає 8 аргументів - вихідне відео, текст, який ви хочете написати, місце, де ви його хочете, шрифт, збільшення, колір, товщина та cv2.LINE_AA (завдяки чому все виглядає краще).

імпорт cv2
захоплення = cv2.VideoCapture ('vtest.avi ')
Правда:
ret, frame = захоплення.читати ()
width = int (захоплення.отримати (3))
висота = int (захоплення.отримати (4))
шрифт = cv2.FONT_HERSHEY_SIMPLEX
image = cv2.putText (кадр, "VTEST.AVI ", (200, 200), шрифт, 4, (0,0,0), 5, cv2.LINE_AA)
cv2.imshow ('кадр', зображення)
якщо cv2.waitKey (40) == ord ('q'):
перерва
захоплення.випуск ()
cv2.знищитиAllWindows ()

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

Щасливого кодування!

Встановіть найновіший емулятор Dolphin для Gamecube & Wii на Linux
Емулятор Dolphin дозволяє грати у вибрані вами ігри Gamecube та Wii на персональних комп’ютерах Linux (ПК). Будучи вільно доступним і відкритим ігров...
Як використовувати GameConqueror Cheat Engine в Linux
Стаття висвітлює посібник із використання механізму читів GameConqueror в Linux. Багато користувачів, які грають у ігри в Windows, часто використовуют...
Кращі емулятори ігрової консолі для Linux
У цій статті буде перелічено популярне програмне забезпечення для емуляції ігрової консолі, доступне для Linux. Емуляція - це рівень сумісності програ...