Спочатку встановимо OpenCV:
pip3 встановити opencv-pythonЧитання та показ зображень
Перше, що нам потрібно навчитися - це читати та писати зображення. Читання файлу зображення, введення повного шляху до файлу або імені файлу (якщо файл знаходиться в папці python) та додавання прапора здійснюється за допомогою cv2.непрочитаний (). Прапор може приймати значення 1 (для кольорового зображення), 0 (для відтінків сірого) або -1 (для кольорового зображення з каналами). Можна використовувати cv2.функція imshow () для показу зображення; тут передаються два аргументи - назва зображення та зображення, яке потрібно показати. Далі ми використовуємо cv2.функція waitKey () для очікування введення з клавіатури; a 0 для cv2.Функція waitKey (0) передбачає постійний час очікування. З іншого боку, cv2.Функція знищення всіхWindows () закриє вікна.
Це зчитує та відкриє зображення, а зображення залишатиметься відкритим, доки його не закриєте:
імпорт cv2image = cv2.imread ('LinuxLogo.jpg ', 1)
cv2.imshow ('зображення', зображення)
cv2.waitKey (0)
cv2.знищитиAllWindows ()
Написати зображення
Ми використовуємо cv2.функція imwrite () для збереження зображення. Ця функція приймає два параметри - ім'я для збереження зображення та зображення, яке ви хочете зберегти.
імпорт cv2image = 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 здатний на багато чудових речей, де треба десь починати. Це може бути навчання для створення та збереження зображень та відео. У цьому підручнику ми навчились робити основи комп’ютерного зору.
Щасливого кодування!