Читать книгу «Компьютерное зрение с OpenCV и Python: практическое руководство» онлайн полностью📖 — Инженера — MyBook.

Глава 2. Основы работы с изображениями в OpenCV

2.1. Загрузка и сохранение изображений


Компьютерное зрение – это область искусственного интеллекта, которая занимается обработкой и анализом визуальной информации. Одним из ключевых этапов в компьютерном зрении является работа с изображениями. В этой главе мы рассмотрим, как загружать и сохранять изображения с помощью OpenCV и Python.


**Загрузка изображений**


OpenCV предоставляет функцию `cv2.imread()`, которая позволяет загружать изображения из файла. Эта функция принимает два аргумента: путь к файлу изображения и флаг, который определяет режим чтения изображения.


```python

import cv2


# Загрузка изображения из файла

img = cv2.imread('image.jpg')


# Проверка, загружено ли изображение успешно

if img is None:

print("Изображение не загружено")

else:

print("Изображение загружено успешно")

```


В этом примере мы загружаем изображение из файла `image.jpg` и проверяем, загружено ли оно успешно. Если изображение не загружено, функция `cv2.imread()` возвращает `None`.


**Сохранение изображений**


OpenCV также предоставляет функцию `cv2.imwrite()`, которая позволяет сохранять изображения в файл. Эта функция принимает два аргумента: путь к файлу, в который будет сохранено изображение, и изображение, которое нужно сохранить.


```python

import cv2


# Загрузка изображения из файла

img = cv2.imread('image.jpg')


# Сохранение изображения в файл

cv2.imwrite('new_image.jpg', img)

```


В этом примере мы загружаем изображение из файла `image.jpg` и сохраняем его в файл `new_image.jpg`.


**Режимы чтения и записи изображений**


OpenCV предоставляет несколько режимов чтения и записи изображений. Например, мы можем загружать изображения в цветовом или черно-белом режиме.


```python

import cv2


# Загрузка изображения в цветовом режиме

img_color = cv2.imread('image.jpg', cv2.IMREAD_COLOR)


# Загрузка изображения в черно-белом режиме

img_gray = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)

```


В этом примере мы загружаем изображение в цветовом и черно-белом режиме. Режим чтения изображения определяется вторым аргументом функции `cv2.imread()`.


**Вывод изображений**


OpenCV предоставляет функцию `cv2.imshow()`, которая позволяет выводить изображения на экран. Эта функция принимает два аргумента: название окна, в котором будет выводиться изображение, и изображение, которое нужно выводить.


```python

import cv2


# Загрузка изображения из файла

img = cv2.imread('image.jpg')


# Вывод изображения на экран

cv2.imshow('Image', img)


# Ожидание нажатия клавиши

cv2.waitKey(0)


# Закрытие всех окон

cv2.destroyAllWindows()

```


В этом примере мы загружаем изображение из файла `image.jpg` и выводим его на экран. Функция `cv2.waitKey(0)` ожидает нажатия клавиши, а функция `cv2.destroyAllWindows()` закрывает все окна.


В этой главе мы рассмотрели, как загружать и сохранять изображения с помощью OpenCV и Python. Мы также рассмотрели режимы чтения и записи изображений, а также вывод изображений на экран. В следующей главе мы рассмотрим основы обработки изображений.


2.2. Основные операции с изображениями (резка, масштабирование, поворот) **2.2. Основные операции с изображениями (резка, масштабирование, поворот)**


В предыдущей главе мы познакомились с основными понятиями компьютерного зрения и научились загружать изображения с помощью OpenCV. Теперь давайте перейдем к более интересным операциям с изображениями. В этой главе мы рассмотрим три фундаментальные операции: резку, масштабирование и поворот изображений.


**Резка изображений**


Резка изображений – это процесс выделения определенной части изображения и сохранения ее в отдельном файле или переменной. Эта операция часто используется при обработке изображений, когда нам нужно выделить определенный объект или область интереса.


В OpenCV резку изображений можно осуществить с помощью оператора среза (`[]`). Например, если у нас есть изображение `img` и мы хотим выделить квадратную область размером 100x100 пикселей, начиная с точки (50, 50), мы можем сделать это следующим образом:

```python

import cv2


# Загрузка изображения

img = cv2.imread('image.jpg')


# Резка изображения

crop_img = img[50:150, 50:150]


# Вывод резанного изображения

cv2.imshow('Crop Image', crop_img)

cv2.waitKey(0)

cv2.destroyAllWindows()

```

В этом примере мы выделили квадратную область размером 100x100 пикселей, начиная с точки (50, 50), и сохранили ее в переменной `crop_img`.


**Масштабирование изображений**


Масштабирование изображений – это процесс изменения размера изображения. Эта операция часто используется при обработке изображений, когда нам нужно изменить размер изображения для дальнейшей обработки или отображения.


В OpenCV масштабирование изображений можно осуществить с помощью функции `cv2.resize()`. Например, если у нас есть изображение `img` и мы хотим масштабировать его до размера 640x480 пикселей, мы можем сделать это следующим образом:

```python

import cv2


# Загрузка изображения

img = cv2.imread('image.jpg')


# Масштабирование изображения

resized_img = cv2.resize(img, (640, 480))


# Вывод масштабированного изображения

cv2.imshow('Resized Image', resized_img)

cv2.waitKey(0)

cv2.destroyAllWindows()

```

В этом примере мы масштабировали изображение до размера 640x480 пикселей и сохранили его в переменной `resized_img`.


**Поворот изображений**


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


В OpenCV поворот изображений можно осуществить с помощью функции `cv2.getRotationMatrix2D()` и `cv2.warpAffine()`. Например, если у нас есть изображение `img` и мы хотим повернуть его на 45 градусов, мы можем сделать это следующим образом:

```python

import cv2

import numpy as np


# Загрузка изображения

img = cv2.imread('image.jpg')


# Создание матрицы поворота

(h, w) = img.shape[:2]

(cX, cY) = (w // 2, h // 2)

M = cv2.getRotationMatrix2D((cX, cY), 45, 1.0)


# Поворот изображения

rotated_img = cv2.warpAffine(img, M, (w, h))


# Вывод повернутого изображения

cv2.imshow('Rotated Image', rotated_img)

cv2.waitKey(0)

cv2.destroyAllWindows()

```

В этом примере мы повернули изображение на 45 градусов и сохранили его в переменной `rotated_img`.


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


2.3. Работа с цветовыми пространствами


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


**Что такое цветовое пространство?**


Цветовое пространство – это математическая модель, которая описывает способ представления цвета в цифровых изображениях. Цветовое пространство определяет, как цвета будут представлены в виде числовых значений, и как эти значения будут интерпретироваться компьютером.


**Основные цветовые пространства**


Существует несколько основных цветовых пространств, которые используются в компьютерном зрении:


* **RGB (Red, Green, Blue)**: Это наиболее распространенное цветовое пространство, в котором каждый пиксель изображения представлен тремя значениями: красным, зеленым и синим. Эти значения обычно представлены в виде 8-битных целых чисел, что позволяет представить 256 различных оттенков каждого цвета.

* **BGR (Blue, Green, Red)**: Это цветовое пространство аналогично RGB, но порядок цветов обратный. OpenCV по умолчанию использует цветовое пространство BGR.

* **HSV (Hue, Saturation, Value)**: Это цветовое пространство представляет цвета в виде трёх компонентов: оттенка (hue), насыщенности (saturation) и яркости (value). Это цветовое пространство часто используется для разделения объектов на изображении по цвету.

* **YCrCb (Luminance, Chrominance)**: Это цветовое пространство представляет цвета в виде яркости (luminance) и двух компонентов хроминанса (chrominance). Это цветовое пространство часто используется в видеокодировании.


**Преобразование между цветовыми пространствами**


OpenCV предоставляет функции для преобразования между различными цветовыми пространствами. Например, функция `cv2.cvtColor()` позволяет преобразовать изображение из одного цветового пространства в другое.


```python

import cv2


# Загрузка изображения

img = cv2.imread('image.jpg')


# Преобразование изображения в цветовое пространство HSV

hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)


# Преобразование изображения в цветовое пространство YCrCb

ycrcb_img = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)

```


**Практические применения**


Цветовые пространства имеют много практических применений в компьютерном зрении. Например, преобразование изображения в цветовое пространство HSV позволяет легко разделить объекты на изображении по цвету. Преобразование изображения в цветовое пространство YCrCb позволяет снизить размерность изображения и улучшить качество видеокодирования.


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


Глава 3. Обработка изображений

3.1. Применение фильтров (сглаживание, резкость, гауссовский фильтр)


В предыдущих главах мы познакомились с основными понятиями компьютерного зрения и научились работать с изображениями в OpenCV. Теперь мы перейдем к более интересной теме – применению фильтров для обработки изображений. Фильтры позволяют нам улучшить качество изображений, удалить шум, выделить важные детали и даже создать художественные эффекты.


**Сглаживание**


Одним из наиболее распространенных типов фильтров является сглаживание. Сглаживание используется для удаления шума и мелких деталей с изображения, что может быть полезно при обработке изображений с низким качеством или при необходимости выделить крупные объекты.

Конец ознакомительного фрагмента.