Рубрики
Без рубрики

Основные функции OpenCV, чтобы вы начали в компьютерное зрение

Компьютерное зрение – это область искусственного интеллекта, которая обучает компьютеров интерпретировать и понимать … Помечено искусственным интеллектом, компьютерным зрением, ИИ, Питоном.

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

OpenCV – это библиотека, предназначенная для решения общих проблем с компьютерным зрением, она очень популярна среди тех, кто в этой области, и она отлично подходит для обучения и использования в производстве. Библиотека имеет интерфейсы для нескольких языков, включая Python, Java и C ++.

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

Что именно мы собираемся учиться сегодня?

  • Чтение, написание и отображение изображений
  • Изменение цветовых пространств
  • Изменение размера изображений
  • Вращение изображения
  • Обнаружение краев

Чтение, написание и отображение изображений

Прежде чем мы сможем что -либо сделать с компьютерным зрением, мы должны иметь возможность читать и понимать, как обрабатываются изображения компьютерами. Единственными информационными компьютерами могут обрабатывать бинарную информацию (0 и 1), это включает текст, изображения и видео.

Как компьютеры работают с изображениями

Чтобы понять, как компьютер «понимает» изображение, которое вы можете представить матрицу размера изображения, где на каждой ячейке вы назначаете значение, которое представляет цвет изображения в этой позиции.

Давайте возьмем пример с изображением в серого счетов:

Для этого конкретного случая мы можем назначить каждый блок (или пиксель) на изображении числовое значение (которое можно интерпретировать как двоичный). Это числовое значение может быть из любого диапазона, хотя это соглашение для использования 0 для черного, 255 для белого и всех целых чисел, чтобы представлять интенсивность.

Когда мы работаем с цветными изображениями, все может стать немного другим в зависимости от библиотеки и того, как мы решаем представлять цвета. Мы поговорим больше об этом позже в этом посте, однако все они имеют более или менее одну и ту же идею, которая использует разные каналы для представления цвета, являясь RGB (красный, зеленый и синий) одним из самых популярных вариантов. С RGB нам нужно 3 канала для построения каждого пикселя, поэтому наша 2D -матрица теперь представляет собой трехмерную матрицу с глубиной 3, где каждый канал является интенсивностью определенного цвета, а при смешивании мы получаем последний цвет для пикселя.

Работа с изображениями с помощью OpenCV

Давайте теперь перейдем к коду, чтобы выполнить 3 из самых важных функций при работе с изображениями, Чтение , показывает и Сохранение Анкет

import cv2
import matplotlib.pyplot as plt

# Reading the image
image = cv2.imread('sample1.jpg')

# Showing the image
plt.imshow(image)
plt.show()

# Saving the image
cv2.imwrite('sample1_output.jpg', image)

Если вы запустите наш код, теперь вы получите одно изображение, сохраненное на диск, а другое – в результате сюжета.

Изображение слева – это то, что мы построили, по сравнению с тем, что справа, которое является изображением, сохраненным на диск. Разница в размерах помимо (из -за сюжета), изображение на левой стороне выглядит странно, выглядит голубовато, но почему оно отличается? (Кстати, изображение справа верно).

Причина, по которой изображение слева выглядит со странными цветами, связана с тем, как OpenCV читает изображения по умолчанию. OpenCV imread () Функция будет читать изображение с помощью Bgr каналы как предполагается RGB который используется функцией графика. Это нормально для OpenCV, и есть способы исправить его, которые мы обсудим дальше.

Изменение цветовых пространств

Что такое цветовое пространство? В нашем предыдущем примере мы увидели, как компьютеры обрабатывают изображения, и мы увидели, что это представляют цвета, которые нам нужно использовать каналы, которые в сочетании мы получаем последний цвет изображения. Конфигурация, в которой установлены эти каналы, представляют собой цветные места. Не зная, что мы уже рассмотрели 2 разных цветовых пространства в нашем предыдущем фрагменте кода, мы использовали RGB и Bgr , но есть больше, которые обладают очень специфическими и интересными свойствами. Некоторые другие популярные цветные пространства включают Лаборатория , Ycrcb В HLS и HSV .С Каждое цветовое пространство имеет свои собственные свойства, некоторые алгоритмы или методы могут работать лучше в одном пространстве, чем другие, поэтому изменение изображения между этими цветными пространствами важно, и, к счастью, OpenCV предоставляет нам очень простую в использовании функцию именно для этой цели.

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

import cv2
import matplotlib.pyplot as plt

# Reading the image
image = cv2.imread('sample1.jpg')

# Change color space
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# Showing the image
plt.imshow(image)
plt.show()

И теперь мы получаем красивую коричневую собаку:

Давайте рассмотрим некоторые другие цветные пространства:

import cv2
import matplotlib.pyplot as plt

# Reading the image
original = cv2.imread('sample1.jpg')

fig = plt.figure(figsize=(8, 2))
axarr = fig.subplots(1, 3)

# Change color space
image = cv2.cvtColor(original, cv2.COLOR_BGR2RGB)
axarr[0].imshow(image)

image = cv2.cvtColor(original, cv2.COLOR_BGR2GRAY)
axarr[1].imshow(image)

image = cv2.cvtColor(original, cv2.COLOR_BGR2LAB)
axarr[2].imshow(image)

plt.show()

Изменение размера изображений

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

OpenCV предлагает практический метод для выполнения, который называется Изменение размера , давайте посмотрим пример того, как его использовать.

import cv2

# Reading the image
original = cv2.imread('sample1.jpg')

# Resize
resized = cv2.resize(original, (200, 200))

print(original.shape)
print(resized.shape)

Которые выводят

(1100, 1650, 3)
(200, 200, 3)

Вращение изображения

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

Давайте посмотрим пример Вращать функция в OpenCV

import cv2
import matplotlib.pyplot as plt

# Reading the image
image = cv2.imread('sample1.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

image = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE)

plt.imshow(image)
plt.show()

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

import cv2
import matplotlib.pyplot as plt

# Reading the image
image = cv2.imread('sample1.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

rows, cols = image.shape[:2]
deg = 45
# (col/2,rows/2) is the center of rotation for the image
# M is the coordinates of the center
M = cv2.getRotationMatrix2D((cols/2, rows/2), deg, 1)
image = cv2.warpAffine(image, M, (cols, rows))

plt.imshow(image)
plt.show()

Обнаружение краев

Край – это точки на изображении, где яркости изображения резко изменяется или имеет разрывы. Такие разрывы обычно соответствуют:

  • Разрывы в глубине
  • Разрывы в ориентации поверхности
  • Изменения в свойствах материала
  • Вариации в освещении сцены

Край – очень полезная особенность изображения, которое можно использовать как часть конвейера ML, мы уже видели несколько примеров о том, как края могут помочь нам обнаружить Формы или Линии на дороге Анкет

CV2 предоставляет нам Хитрый функция для этой задачи, и вот как ее использовать:

import cv2
import matplotlib.pyplot as plt

# Reading the image
original = cv2.imread('sample2.jpg')

fig = plt.figure(figsize=(6, 2))
axarr = fig.subplots(1, 2)

axarr[0].imshow(cv2.cvtColor(original, cv2.COLOR_BGR2RGB))

threshold1 = 50
threshold2 = 200
grey = cv2.cvtColor(original, cv2.COLOR_BGR2GRAY)
image = cv2.Canny(original, threshold1, threshold2)
axarr[1].imshow(image, cmap='gray')

plt.show()

Резюме

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

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

Спасибо за чтение!

Если вам нравится история, пожалуйста, не забудьте подписаться на нашу рассылку, чтобы мы могли оставаться на связи: https://livecodestream.dev/subscribe

Оригинал: “https://dev.to/livecodestream/essential-opencv-functions-to-get-you-started-into-computer-vision-56ik”