OpenCv-Python Библиотека компьютерного зрения с открытым исходным кодом (1)

компьютерное зрение

1. Знакомство с OpenCv

В 1999 году Гэри Брэдски из Intel запустил проект OpenCv и выпустил первую версию в 2000 году. В 2005 году OpenCv впервые был использован в Stanley, который в том же году стал победителем DARPA Grand Challenge. Сегодня, помимо поддержки компьютерного зрения, OpenCv также добавил множество алгоритмов, связанных с машинным обучением, и будет продолжать расширяться в будущем.

OpenCV поддерживает множество основных языков программирования, таких как: C++, Python, Java и т. д., и может использоваться на разных платформах, включая Windows, Linux, OS X, Android и iOS. Кроме того, в разработке находятся интерфейс высокоскоростных вычислений на графическом процессоре на основе CUDA и OpenCL.

2. OpenCV-Python

В этой статье представлен интерфейс Python OpenCv, а именноOpenCV-Python, но это не Python-реализация OpenCv, а только Python-оболочка собственной реализации OpenCv C++, то есть мы можем импортировать и использовать его как обычный модуль Python, но программа C++ все еще работает в фоновом режиме. , который не только в полной мере раскрывает простоту использования Python, но и в полной мере использует эффективность выполнения C++, можно сказать, что он имеет и то, и другое.

Стоит отметить, что OpenCv-Python использует numpy для числовых операций, и все структуры массивов OpenCv (C++) внутренне преобразуются в массивы numpy. Конечно, это также упрощает интеграцию с другими библиотеками, использующими numpy, такими как: Scipy и Matplotlib.

3. Установка

pip install opencv-python

4. Обзор функций

  • Поддержка графического интерфейса: отображение и сохранение изображений и видео, управление событиями мыши и трекбаром.
  • Основные операции: редактирование пикселей изображения, выполнение арифметических операций над изображениями, оптимизация производительности.
  • Обработка изображения: изменение цветового пространства, геометрическое преобразование, пороговое значение изображения, сглаживание, градиент, обнаружение краев, слияние, контурная линия, гистограмма, преобразование Фурье, косинусное преобразование, сопоставление с шаблоном, преобразование линии Хафа, преобразование круга Хафа, сегментация изображения, извлечение переднего плана,
  • Обнаружение и описание функций: обнаружение углов Харриса, обнаружение углов Томаса, SIFT, SURF, ORB, сопоставление признаков, поиск изображений
  • Анализ видео: сегментация фона, отслеживание объектов,
  • Калибровка камеры и 3D-реконструкция: калибровка камеры, предсказание позы, эпиполярная геометрия, глубина резкости извлечения изображения (3D-реконструкция)
  • Машинное обучение: KNN (K-ближайшее значение), SVM (машина опорных векторов), кластеризация K-средних (кластеризация K-средних)
  • Компьютерная визуализация: шумоподавление, восстановление изображения, HDR
  • Обнаружение объектов: распознавание лиц

5. Основные операции

модуль импорта:

import cv2 as cv

5.1 Изображение открыть, отобразить, сохранить

использоватьcv.imread()Откройте изображение и верните массив numpy.

img = cv.imread('dog.jpeg')

print(type(img), img.shape)
<class 'numpy.ndarray'> (320, 320, 3)

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

img_gray = cv.imread('dog.jpeg', 0)

print(type(img_gray), img_gray.shape)
<class 'numpy.ndarray'> (320, 320)

использоватьcv.imshow()Отобразите изображение, откроется окно GUI, изображение будет автоматически масштабировано, чтобы соответствовать размеру экрана, и будет отслеживаться движение мыши.Полоса отслеживания под изображением будет отображать текущую позицию и значение пикселя.imshow()Первый параметр — это заголовок интерфейса окна, как показано на следующем рисунке «image».

cv.imshow('image', img)
cv.waitKey(0)
cv.destroyAllWindows()

Если вы изменили прочитанные данные изображения (массив numpy) и хотите сохранить измененное изображение на диск, вам необходимо использоватьcv.imwrite(), функция получает два параметра, первый параметр — имя сохраняемого файла, а второй параметр — данные изображения, то есть массив numpy.

cv.imwrite('dog_gray.png', img_gray)
True

Мы уже знаем, как использовать opencv-python для открытия, отображения и сохранения изображений, а затем всесторонне можем сделать полную небольшую программу.

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

img = cv.imread('dog.jpeg', 0) # 打开灰度图
cv.imshow('dog', img) # 在窗口显示图片
k = cv.waitKey(0) # 持续等待键盘事件
if k == 27:         # 按 ESC 键退出
    cv.destroyAllWindows()
elif k == ord('s'): # 按字母 s 键保存并退出
    cv.imwrite('dog_gray.png',img)
    cv.destroyAllWindows()

5.2 Захват видео, воспроизведение, сохранение

5.2.1 Захват живого видеопотока

Захват живого видеопотока (картинка за картинкой) со встроенной камеры ноутбука и отображение кадров видео после обработки в градациях серого, эффект видео после обработки в градациях серого.

cap = cv.VideoCapture(0)
if not cap.isOpened():
    print("无法打开视频输入设备!")
    exit()
while True:
    # 一帧一帧读取视频
    ret, frame = cap.read()
    # 如果成功读取到视频帧,返回 True
    if not ret:
        print("无法接收视频输入,请检查是否开启设备访问权限。正在退出程序...")
        break
    # 在此执行对帧的处理操作
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    # 显示处理后的帧
    cv.imshow("Capture Live Video Stream", gray)
    # 按字母 q 键退出程序
    if cv.waitKey(1) == ord('q'):
        break
# 释放设备访问,关闭所有窗口
cap.release()
cv.destroyAllWindows()

5.2.2 Воспроизведение видеофайлов

cap = cv.VideoCapture('dance.mp4')
while cap.isOpened():
    # 一帧一帧读取视频
    ret, frame = cap.read()
    # 如果成功读取到视频帧,返回 True
    if not ret:
        print("无法接收视频输入,请检查是否开启设备访问权限。正在退出程序...")
        break
    # gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    cv.imshow('Play Video File', frame)
    if cv.waitKey(1) == ord('q'):
        break
cap.release()
cv.destroyAllWindows()

5.2.3 Сохранить видеофайл

Захват видеопотока в реальном времени с устройства видеоввода, такого как встроенная камера ноутбука, обработка его кадр за кадром и сохранение в файл output.avi .

cap = cv.VideoCapture(0)
# 定义编解码器并创建 VideoWriter 对象
fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('output.avi', fourcc, 20.0, (640,  480))
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        print("无法接收视频输入,请检查是否开启设备访问权限。正在退出程序...")
        break
    # 对每一帧进行垂直翻转
    frame = cv.flip(frame, 0)
    # 写入翻转后的帧
    out.write(frame)
    cv.imshow('Capture Live Video Stream', frame)
    if cv.waitKey(1) == ord('q'):
        break
# 线程结束,释放所有资源
cap.release()
out.release()
cv.destroyAllWindows()

Нелегко настаивать на написании колонки. Если вы считаете, что эта статья полезна для вас, не забудьте поставить лайк. Спасибо за поддержку!


Отсканируйте QR-код в WeChat, чтобы получить оригиналы новейших технологий