Компьютерное зрение — одна из важнейших областей науки о данных. Компьютерное зрение — это область исследований, цель которой — воспроизвести человеческую зрительную систему в компьютере. Это позволяет компьютеру получать, отображать, анализировать, идентифицировать и извлекать информацию из изображений, видео или других визуальных выходных данных.
Сегодня я познакомлю вас с одним из самых популярных инструментов для работы с компьютерным зрением — Open CV.
OpenCV — это библиотека с открытым исходным кодом, которая поддерживает несколько языков программирования, таких как Python, Java и C++. Впервые он был выпущен в 2000 году, и теперь он содержит более 25000 алгоритмов, включая компьютерное зрение и машинное обучение. С таким всеобъемлющим алгоритмом вы можете выполнять сложные задачи компьютерного зрения, такие как идентификация объекта, идентификация лиц и эмоций и даже идентификация действий человека с помощью OpenCV. В этой статье я расскажу вам об основах OpenCV с использованием языка python.
1. Установите OpenCV
Прежде чем мы начнем, сначала нам нужно установить OpenCV на наш компьютер. Вам просто нужно ввести команду
pip install opencv-python
или если вы используете Anaconda, вы можете ввести эту команду
conda install -c conda-forge opencv
2. Читайте, показывайте и сохраняйте изображения
Одним из самых основных способов использования OpenCV является чтение изображений.
Здесь мы видим, что картинка, которую читает cv2, имеет странную окраску. Это потому, что по умолчанию функция cv2.imread читает изображение в формате BGR. Чтобы загрузить изображение в формате RGB, нам нужно ввести дополнительную функцию.
Вы можете ввести функцию cv2.cvtColor() для преобразования цвета, а затем использовать функцию cv2.COLOR_BGR2RGB для преобразования формата цвета BGR в формат цвета RGB.
Помимо использования matplotlib для отображения уже прочитанного изображения OpenCV. вы также можете использовать cv2.imshow() или, если вы открываете свой блокнот в Google Colab, вы можете вместо этого использовать cv2_imshow().
Теперь, если вы закончили обработку изображения и хотите сохранить изображение, вы можете ввести cv2.imwrite(‘filename.jpg’, image) где ‘filename.jpg’ – это имя файла, который вы хотите сохранить как
Теперь мы можем видеть в примере, что я набираю команду cv2.imwrite(‘trooper_small.jpg’, img) и теперь изображение штурмовика сохраняется с именем файла trooper_small.jpg
3. Изменить размер изображения
Иногда при выполнении компьютерного зрения, например, когда вам нужно использовать данные изображения в качестве входных данных для глубокого обучения модели, вам необходимо указать размер вашего изображения, чтобы он соответствовал входным данным модели. В OpenCV есть функция, которая может помочь вам с тем, что cv2.resize()
Я собираюсь дать вам пример использования функции изменения размера.
Здесь я увеличиваю размер изображения до 500 по высоте и 500 по ширине. Параметр интерполяции используется для установки интерполяции, которая используется при изменении размера изображения, в этом примере я использую ближайшую интерполяцию, если вы хотите узнать больше о других доступных интерполяциях, посетите здесь.
https://www.tutorialkart.com/opencv/python/opencv-python-resize-image/
Вот еще один пример использования функции изменения размера. На этот раз я уменьшаю изображение до 100 по высоте и 100 по ширине.
4. Обрезать изображение
Еще одна замечательная техника обработки изображений, которую вы можете внедрить с помощью OpenCV, — это обрезка изображения. Допустим, вы хотите использовать только определенную часть изображения в качестве входных данных для обучения вашей модели или, возможно, для вывода данных. Затем вы можете решить эту проблему, обрезав изображение для определенной части.
Если вы хотите обрезать изображение с помощью OpenCV, вы можете сделать это, используя метод нарезки в массиве изображений. Я приведу вам пример, где я собираюсь обрезать изображение штурмовика из увеличенного изображения.
Здесь вы можете увидеть, как я использую метод нарезки, чтобы установить координату кадрирования для изображения штурмовика. Если вы хотите обрезать другую часть изображения, вы можете изменить значение нарезки на желаемый результат.
5. Поворот изображения
В OpenCV есть простая функция для поворота изображения с помощью cv2.flip(). Я приведу пример использования этой функции flip(). Сначала я собираюсь загрузить новые данные изображения.
Существует 2 входа для функции cv2.flip(), первый - это изображение, которое вы хотите перевернуть, а второй - это код переворота, 1 перевернет изображение по оси x или по горизонтали, а 0 перевернет изображение. вертикально или вдоль оси Y.
Использование cv2.flip() является хорошей альтернативой для увеличения данных, если вам нужно изображение с другого ракурса. Но у него есть ограничение: когда вы используете cv2.flip(), вы не можете установить степень поворота изображения. Переворот всегда будет на 180 градусов. Поэтому вы не всегда можете использовать его для увеличения данных.
Существует еще один метод, использующий cv2.getRotationMatrix2D() для определения матрицы вращения и объединения ее с функцией cv2.warpAffine() для преобразования массива изображений с матрицей вращения.
Чтобы создать матрицу вращения, сначала вам нужно найти центр изображения. Вы можете сделать это, разделив высоту и ширину изображения на 2. После этого вы можете установить, насколько выполняется вращение, введя значение в поле ввода угла. Ввод угла будет определять, на какой градус вращения будут направлены изображения. После того, как у вас есть матрица вращения, вы можете использовать функцию cv2.warpAffine() для преобразования изображений в соответствии с матрицей вращения.
6. Фильтрация изображений с помощью свертки
Еще одна замечательная функция OpenCV — возможность фильтровать изображение с помощью ядра свертки. Фильтрация изображения используется для уменьшения шума на изображении и создания эффекта размытия и сглаживания. Я собираюсь привести вам пример его использования.
В этом примере я использую функцию cv2.filter2D() с единичной матрицей в качестве ядра свертки для фильтрации изображений. Результат показывает размытые изображения после выполнения фильтрации. Вы можете настроить тип фильтрации, которую хотите использовать, определив другую матрицу ядра.
Существует еще один распространенный метод фильтрации, который может использовать OpenCV, и у него есть собственная специальная функция — размытие по Гауссу. Я собираюсь показать вам пример его использования.
В этом примере вы можете видеть, что я использую функцию cv2.GaussianBlur() и у меня есть три аргумента, первый из которых — это изображение, к которому я хочу применить размытие по Гауссу. Вторым аргументом является размер ядра для размытия по Гауссу. Последний аргумент — это стандартное отклонение ядра.
7. Обнаружение края
Последняя базовая функция OpenCV, которую я собираюсь объяснить, — обнаружение границ. который должен идентифицировать границы или края объекта на изображении. Обнаружение краев в основном используется для извлечения особенностей изображений, которые будут использоваться для идентификации и классификации объектов.
Вот пример обнаружения границ. Я использую функцию cv2.sobel() с входными аргументами dx=1 и dy=0, чтобы увидеть ребро в направлении x.
В этом примере я переворачиваю аргумент из последнего с входными данными dx=0 и dy=1, чтобы увидеть край изображения с направления y.
В этом последнем примере я ввожу как dx=1, так и dy=1, чтобы обнаружить края изображения как по оси x, так и по оси y.
Как вы можете видеть из трех примеров, вы можете обнаруживать края изображения с разных точек зрения, и в каждом результате есть большая разница, когда вы смотрите на него под разными углами.
Из приведенного выше объяснения мы можем сделать вывод, что OpenCV — это такая универсальная библиотека, которую можно использовать для решения ваших повседневных проблем с компьютерным зрением. Я надеюсь, что эта статья вызовет у вас интерес к использованию OpenCV.
С такой всеобъемлющей библиотекой есть еще больше функций OpenCV, которые не были рассмотрены в этой статье, которые вам еще предстоит открыть.
Использованная литература :
Эта статья написана как часть учебного курса Hacktiv8 Data Science Bootcamp.
Автор:
Мухамад Багус Септиан: https://www.linkedin.com/in/muhamad-bagus-septian-55881173/
Бандоро Гунарсо: https://www.linkedin.com/in/bandoro-gunarso-979443197/