Python + OpenCV = Обработка изображений

Для создания на компьютере и/или на мини компьютере робота (например raspberry pi) программ моделирования компьютерного зрения, нейронных сетей и других задач искусственного интеллекта (ИИ) нам потребуется изучить язык Python, краткий учебник по Python здесь. Почему Python, потому что он самый распространенный в мире решения задач ИИ, поэтому наработано множество готовых программ и библиотек на этом языке, которые мы будем использовать совершенно бесплатно.
Кроме того нам понадобится Anaconda® - это менеджер пакетов, менеджер среды и дистрибутива Python и коллекция из более чем 1000 + пакетов с открытым исходным кодом . Он бесплатный и простой в установке, и он предполагает бесплатную поддержку сообщества.
И для удобства работы с языком Python нам потребуется отладчик  или проще говоря  IDE: интегрированная среда разработки от компании JetBrains: IDE PyCharm —  предоставляет средства для анализа кода, графический отладчик, инструмент для запуска юнит-тестов и поддерживает веб-разработку на Django.
1. Скачиваем с официального сайта дистрибутив языка Python  на свой компьютер в любую папку.
2. Скачиваем с официального сайта дистрибутив менеджера языка Python  Анаконда на свой компьютер в ту любую папку.
3. Скачиваем с официального сайта дистрибутив  IDE PyCharm для языка Python на свой компьютер в ту любую папку.
Устанавливаем язык Python, Anaconda и IDE PyCharm на свой компьютер по инструкции на этой странице
Проверить работу менеджера Anaconda можно просто запустить Anaconda Navigator (графический в браузере) или  Anaconda Promt (командная строка)  через меню Windows, там же находится IDE PyCharm:

Изучаем язык  Python посмотрев видео от  Гоши Дударь  и всего лишь за час:

Для обработки изображений нам понадобятся библиотеки OpenCV и NumPy для языка Python.
OpenCV (англ. Open Source Computer Vision Library, библиотека компьютерного зрения с открытым исходным кодом) — библиотека алгоритмов компьютерного зрения, обработки изображений и численных алгоритмов общего назначения с открытым кодом. Реализована на C/C++, также разрабатывается для Python, Java, Ruby, Matlab, Lua и других языков. Может свободно использоваться в академических и коммерческих целях — распространяется в условиях лицензии BSD.
NumPy — библиотека с открытым исходным кодом для языка программирования Python. Возможности:
• поддержка многомерных массивов (включая матрицы кадров изображений);
• поддержка высокоуровневых математических функций, предназначенных для работы с многомерными массивами.
Скачиваем дистрибутив OpenCV с сайта Лаборатории флуоресцентной динамики университета Калифорнии на свой компьютер, в ту любую папку куда скачивали дистрибутив Python. Выбираем необходимую нам версию например:
opencv_python‑3.4.3‑cp37‑cp37m‑win32.whl
где:
opencv_python‑3.4.3 - версия OpenCV;
‑cp37‑cp37m - без поддержки версии языка СPython;
‑win32 - для 32 разрядной версии Windows и Python предназначена.
Устанавливаем OpenCV на свой компьютер, с помощью поставляемой вместе с Python утилиты pip.
Для этого в командной строке Windows (CMD) выполняем команду:

pip install <путь к папке где находится дистрибутив OpenCV>/opencv_python‑3.4.3‑cp37‑cp37m‑win32.whl

После установки в командной строке Python проверяем правильность установки OpenCV. Для этого импортируем библиотеку cv2 (имя библиотеки с переходом на 3 версию не меняли). Для этого в командной строке Windows (CMD) выполняем следующие команды:

>python
  >>> import cv2

Никаких ошибок не должно быть.
Для корректной работы OpenCV устанавливаем библиотеку NumPy:

pip install numpy

Смотрим кино от Образования Будущего про компьютерное зрение:

Создаем свою первую программу захвата и обработки изображения с видеокамеры ноутбука или с USB WEB камеры

import numpy as np
import cv2
cap = cv2.VideoCapture(0)
while(True):
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    cv2.imshow('Video', frame)
    cv2.imshow('Frame', gray)
    print(frame)
    #print(gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()
Кто понял, что выше написано может ниже не читать, а кто не понял, читаем расшифровку:
#подключаем библиотеку numpy c  сокращением названия библиотеки до np что позволяет нам получать доступ к numpy объектам используя запись: np.название объекта

import numpy as np

#подключаем библиотеку OpenCV  c  сокращением названия библиотеки до cv2 позволяет нам получать доступ к OpenCV объектам используя запись вида: cv2.название объекта

import cv2

#выполняем видеозахват с помощью метода VideoCapture(1) библиотеки cv2:  0 – встроенная камера ноутбука;  1 – например подключаемая к USB WEB камера; C:\video\video1.mp3 – видеозахват из файла.

cap = cv2.VideoCapture(1)

#Цикл while (“пока”) позволяет выполнить одну и ту же последовательность действий, пока проверяемое условие истинно. Условие записывается до тела цикла и проверяется до выполнения тела цикла. Как правило, цикл whileиспользуется, когда невозможно определить точное значение количества проходов исполнения цикла. (True) – цикл выполняется до тех пор пока не станет истинной выполнение условия в выражении if cv2.waitKey(1) & 0xFF == ord('q'):

while(True):
ret, frame = cap.read()

#конвертируем методом cvtColor изображение из цветного кадра frame в черно-белый кадр gray с флагом COLOR_BGR2GRAY, который указывает на преобразование типа BGR Gray

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

# вывод методом imshow цветного изображения покадрово из переменной frame в окно с названием Video;

cv2.imshow('Video', frame)

# вывод методом imshow черно-белого изображения покадрово из переменной gray в окно с названием Frame;

cv2.imshow('Frame', gray)

#Выход из цикла while(True) по условию if  при нажатии клавиши q;

if cv2.waitKey(1) & 0xFF == ord('q'):
break

#Закрываем канал видеозахвата;

cap.release()

#Закрываем все окна открытые программой;

cv2.destroyAllWindows()

Рис. 2 Вывод методом imshow цветного изображения покадрово frame в окно с названием Video;
cv2.imshow('Video', frame)

Рис. 3 Вывод методом imshow черно-белого изображения покадрово из переменной gray в окно с названием Frame;
cv2.imshow('Frame', gray)
Краткий учебник по Python  здесь . . .

Операторы и выражения языка Python здесь . . .

Метод Python os.listdir () здесь . . .

SciPy — библиотека для языка программирования Python с открытым исходным кодом, предназначенная для выполнения научных и инженерных расчётов. Википедия .  .  .

Учебник Python Numpy здесь . . .

Python для универсального доступа к архиву на основе libarchive здесь . . .

Обсуждение: 2 комментария

  1. Чекин Виктор:

    Живы здоровы.
    Прошу выслать код(программу)видео замка для нескольких лиц.Сообщите стоимость.
    С уважением Чекин Виктор,Россия,Воронеж,8 9525539621,mveo@yandex.ru

    Ответить
  2. boris102:

    Добрый день. Подскажите как сделать фото заданного размера (нужно width = 640
    height = 360) вот код
    import cv2

    cam = cv2.VideoCapture(0)

    cv2.namedWindow(«test»)

    img_counter = 0
    while True:
    ret, frame = cam.read()
    cv2.imshow(«test», frame)
    if not ret:
    break
    k = cv2.waitKey(1)

    if k%256 == 27:
    # ESC pressed
    print(«Escape hit, closing…»)
    break
    elif k%256 == 32:
    # SPACE pressed
    img_name = «opencv_frame_{}.png».format(img_counter)
    cv2.imwrite(img_name, frame)
    print(«{} written!».format(img_name))
    img_counter += 1

    cam.release()

    cv2.destroyAllWindows()

    Ответить

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

четыре − два =

© 2024 Журнал научно-технического творчества педагогов и школьников "Главный конструктор"