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

Python OpenCV обработка изображений – изменение размера, смеси, размытие, порог, конвертировать

В этом руководстве является введение в библиотеку OpenCV. Узнайте, как преобразовать цветные каналы, изменить размер, смесь, размытие и пороговые изображения в Python. https://youtu.be/M_TV4cca7oQ Библиотека OpenCV [1] содержит большую часть функций, которые нам нужны для работы с изображениями. Обработка изображений в программировании требуется другая интуиция, чем обработка текстовых данных. Изображение сделано … Python Opencv Обработка изображений – Изменение размера, смеси, размытие, порог, преобразовать Подробнее »

Автор оригинала: Hwei Geok Ng.

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

Библиотека OpenCV [1] содержит большую часть функций, которые нам нужны для работы с изображениями. Обработка изображений в программировании требуется другая интуиция, чем обработка текстовых данных. Изображение состоит из пикселей. Похоже на электронную таблицу, полную клетки с численными значениями при увеличении. Каждый пиксель обычно содержит значение в диапазоне от 0 до 255. Значение указывает на степень яркости для цвета, которому она назначена. Итак, как мы работаем с изображениями в Python? Нам сначала нужно загрузить их как Numpy массивы, преобразуя все пиксели изображения в числовые значения. Только тогда мы можем использовать различные методы компьютерного видения для манипулирования их.

В этой статье мы собираемся получить наши руки грязными экспериментами с изображениями с использованием OpenCV. Мы рассмотрим методы, такие как цветное преобразование, изменение размера, смешивания, размытия и пороговое значение. Получение данных ваших изображений справа – это половина пути успеха для полезной модели обучения машины. Заинтригован? Давайте начнем.

Установите и импортируйте необходимые модули

Для этого учебника нам нужно установить модули OPENCV, NUMPY и MATPLOTLIB. Numpy используется для манипулирования массивами изображения. MATPLOTLIB используется для отображения изображений для сравнения «до и после». Не стесняйтесь клонировать github repo Это руководство Отказ

Во-первых, создайте виртуальную среду для этого проекта. Затем установите указанные модули в ноутбуке Jupyter:

!pip install opencv-python  
!pip install numpy
!pip install matplotlib

Здесь нет удивления – установка должна быть простой и быстрой. Теперь выполните следующие строки кода в ноутбуке:

import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

Обратите внимание, что % matplotlib inline Magic Command Exclusive для ноутбуков Jupyter. Он не требуется в сценарии Python. Он устанавливает бэкэнду модуля MATPLOTLIB для отображения встроенных цифр и не на отдельном окне.

Выполнено! Получите ваши любимые фотографии – пришло время для экспериментов!

Загрузить изображение и конвертировать цветные каналы

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

img_greyscale = cv2.imread('./photo.jpg', 0)
img_greyscale.shape
img = cv2.imread('./photo.jpg')
img.shape

Обратите внимание, что изображения загружаются как Numpy массивы – одна градация и еще одна в цвете. Форма Способ возврата (5563, 3709) для переменной IMG_GREYSCALE и (5563, 3709, 3) для IMG Отказ Метод возвращает информацию в виде (высота, ширина, канала). Оба переменные имеют одинаковую высоту и ширину значений. Но IMG_GREYSCALE состоит только из одного канала (один цвет), в то время как IMG имеет три.

По умолчанию Imread Способ нагружает изображение с порядок цвета синего, зеленого, красного цвета. Это не обычный красный, зеленый, синий. Если вы когда-нибудь удивляетесь, почему ваши изображения выглядят странно в OpenCV, именно это. Чтобы отобразить изображение, используйте Imshow Метод модуля MATPLOTLIB следующим образом:

plt.imshow(img)

На рисунке 1 показано, насколько различно изображено изображение, когда его цветные каналы смешиваются. MATPLOTLIB отображает красный канал как синий для изображения слева. Чтобы исправить это, мы можем использовать OpenCV CVTCOLOR Способ преобразования цветных каналов из (B, G, R) в (R, G, B) следующим образом:

img_RGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

Исправленное цветное изображение отображается на правой стороне рисунка 1. Мы будем использовать изображение RGB в качестве примера в последних разделах. Но с помощью изображений RGB не требует – не стесняйтесь использовать изображение BGR, если вы предпочитаете. Убедитесь, что выберите правильные каналы в работе.

Изменить размер изображения

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

width = int(img_RGB.shape[1] / 2)
height = int(img_RGB.shape[0] / 2)

img_RGB_smaller = cv2.resize(src=img_RGB, dsize=(width, height)) 
img_RGB_smaller.shape

Обратите внимание, что вы можете предоставить любые положительные целочисленные значения для Dsize Параметр изменить размер метод. Тем не менее, это хорошая практика для использования масштабного коэффициента для сохранения первоначального соотношения аспекта изображения. Показанный код принимает значения ширины и высоты исходного изображения и разделяет их на два. Вывод img_rgb_smaller.shape это (2781, 1854, 3), что на 50% меньше, чем его первоначальный размер, (5563, 3709, 3). Вы также можете сделать изображение больше, умножая его ширину и высоту на два, следующим образом:

width = int(img_RGB.shape[1] * 2)
height = int(img_RGB.shape[0] * 2)

img_RGB_bigger = cv2.resize(src=img_RGB, dsize=(width, height)) 
img_RGB_bigger.shape

Это создает образ размеров (11126, 7418, 3). Не стесняйтесь быть креативным с определениями размеров изображения. На рисунке 2 показаны изображения изменений. Оба выглядят одинаково, потому что их соотношения сторон сохраняются. Вместо этого обратите внимание на различия в осях их ширины и высоты.

Смешивать изображения

Смешивание изображения означает объединение двух изображений с общей прозрачностью. Мы хотим, чтобы два изображения «смешались» друг друга как одно изображение. Для этого нам нужно загрузить другое изображение на нашу ноутбук:

img_overlay = cv2.imread('./photo-overlay.jpg')
img_overlay.shape

Все изображения, используемые в этом проекте кода, можно найти на unsplash.com. Второе изображение загружено как переменная img_overlay С размерами (2000, 1800, 3). Изображения должны иметь одинаковый размер для смешивания изображения. Как img_overlay Различается из другого размера, чем первое изображение, нам нужно изменять его изменить размер, чтобы соответствовать размеру первого изображения:

img_overlay = cv2.resize(img_overlay, (img_RGB.shape[1], img_RGB.shape[0]))
img_overlay.shape

Обратите внимание, что Dsize Параметр принимает значение в форме (ширина, высота), а не (высота, ширина). Таким образом, мы входим (img_rgb.shape [1], img_rgb.shape [0]) как параметр вместо другого пути. Теперь вывод img_overlay.shape должен показать тот же размер, что и img_rgb , что составляет (5563, 3709, 3). Введите следующий код, чтобы объединить как изображения вместе:

blended = cv2.addWeighted(src1=img_RGB, alpha=0.3, src2=img_overlay, beta=0.7, gamma=0)

придурок Способ OPENCV сочетает в себе изображения с «тяжестью прозрачности». SRC1 Параметр занимает фоновое изображение и SRC2 изображение переднего плана. Альфа Параметр устанавливает прозрачность SRC1 и Бета SRC2 Отказ Оба Альфа и Бета Может принимать значения от 0 до 1 и должны добавлять до 1. Значение ближе к 0 указывает на более прозрачность. Значение ближе к 1 указывает на более опасность. Гамма Параметр устанавливает яркость выходного изображения. На рисунке 3 показаны ранее и после операции смешивания изображения.

Размытие изображения

Здесь мы обрежьте меньшее сечение изображения, чтобы лучше обратить внимание на операцию размытия изображения. Принимая img_rgb Мы скопироваем его правую часть как img_small Использование Numpy Smicing Shicing:

img_small = img_RGB[4000:, 2000:]

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

blurred = cv2.blur(src=img_small, ksize=(100, 100))

Должно быть, вы должны ознакомиться с параметрами OpenCV уже. В противном случае нажмите кнопки Shift + Tab для просмотра каких-либо описаний функции. ksize Параметр размытие Метод определяет размеры ядра фильтра. Ядро похоже на кисть или губку, которую вы используете для «размытия» оригинального изображения и сделать его размытым. ksize Параметр – это ширина и высота губкой, которую вы хотите использовать – в этом случае 100 х 100. На рисунке 4 показано обрезанное изображение с его размытым эффектом.

Пороговое изображение

Пороговое значение изображения превращает изображение в серое изображение в черные или белые пиксели. Вы можете спросить: Что нужно для размытия и пороговых изображений? Ответ: так что вычислительные модели могут воспринимать данные изображения лучше. Возьмите обнаружение краев в качестве примера: мы хотим размыть или гладкие края объекта, чтобы быть меньше шума. И мы хотим, чтобы порог образы, поэтому границы объекта могут быть определены лучше.

Для порогов мы используем IMG_GREYSCALE вместо цветного изображения. Введите следующий одноклассник в своем ноутбуке:

ret, thresh1 = cv2.threshold(src=img_greyscale, thresh=127, maxval=255, type=cv2.THRESH_BINARY)

Пороговой метод принимает изображение Greyscale как его SRC параметр. Thresh Параметр – это режущая точка для черного/белого пиксельного решения. Любое значение пикселя ниже Thresh Значение будет назначено 0. Любое значение пикселя выше Thresh Значение будет назначено 1. Это создает черно-белый контраст. Поскольку изображение имеет свои значения варьированы от 0 до 255, мы назначаем MaxVal (наибольшее значение) параметр как 255. Тип Параметр определяет тип порога, который мы хотим. Threesh_Binary преобразует все оттенки серого в изображении в черный или белый. На рисунке 5 показано изображение серого с его результатом после операции порогового значения.

Вы только что узнали пять полезных методик в компьютерном видении. Отличная работа!

Заключение

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

использованная литература

[1] https://opencv.org/about/

Оригинал: “https://blog.finxter.com/five-useful-image-processing-techniques-in-python-using-opencv/”