Операции маскировки над изображениями с Python и OpenCV

Операции маскировки над изображениями с Python и OpenCV

Операции маскировки над изображениями с Python и OpenCV

Изображение есть набор данных, закодированных в числовой последовательности. Извлекая числа, затем можно проводить с ними различные операции. И ,также, полученный результат можно вернуть в виде изображения.
Маскировка-это процесс изменения изображения путем применения маски. Здесь маска-это изображение, интенсивность пикселей которого равна либо нулю, либо единице, т. е. двоичная. Когда маска применяется к изображению, пиксели (изображения), совпадающие с нулем в маске, отключаются. Аналогично, пиксели, совпадающие с единицей, остаются прежними. Это в точности похоже на побитовую операцию И.
Указанные операции возможно провести с помощью Opencv и Python.

И так, для чего используется маскировка?

Маскировка имеет различные варианты использования в цифровой обработке изображений.

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

OpenCV предоставляет функции для выполнения арифметических операций, таких как AND, OR, NOT, XOR для изображений. Эти операции полезны для маскировки.

И для начала, определяем массивы нулей numpy и рисуем на них некоторые фигуры(прямоугольник и круг) белым цветом, т. е. цветом (255,255,255). Мы будем выполнять операции **AND, OR, NOT, XOR ** над этими двумя массивами и видеть их выходные данные.


import numpy as np
import cv2

rectangle = np.zeros((300, 300), dtype = "uint8")
cv2.rectangle(rectangle, (25, 25), (275, 275), 255, -1)

circle = np.zeros((300, 300), dtype = "uint8")
cv2.circle(circle, (150, 150), 150, 255, -1)

cv2.imshow("rect",rectangle)
cv2.waitKey(0)

rectangle

Операции маскировки над изображениями с Python и OpenCV


cv2.imshow("rect", circle)
cv2.waitKey(0)

circle

Операции маскировки над изображениями с Python и OpenCV

Операция AND

Операция с двумя входами, которая возвращает значение true тогда и только тогда, когда оба входа являются истинными (или 1)


bitAnd = cv2.bitwise_and(rectangle, circle)


Операции маскировки над изображениями с Python и OpenCV

OR

Операция с двумя входами, которая возвращает значение true только в том случае, если один из входов является истинным (или 1).


bitOr = cv2.bitwise_or(rectangle, circle)


Операции маскировки над изображениями с Python и OpenCV

NOT

NOT является единственной операцией, которая изменяет значение ввода. В этом случае он преобразует все пиксели со значением 1 в 0 и наоборот.


bitNot = cv2.bitwise_not(circle)


Операции маскировки над изображениями с Python и OpenCV

Операция XOR

Операция XOR, или исключающее или(OR) может быть обобщена как функция, которая возвращает значение true только в том случае, если два операнда различны. Пример Ввода(1,1) или ввода(0,0) приводит к ложному(или 0), но ввод(1,0) или ввод(0,1) является истинным(или 1).


bitXor = cv2.bitwise_xor(rectangle, circle)


Операции маскировки над изображениями с Python и OpenCV

Маскировка изображений

Маскировка обычно выполняется с помощью побитовой функции И — AND. Эта функция принимает дополнительный ввод, называемый маской. Мы передаем значение нашей маски, которое затем позволит нам показывать только те части изображения, которые активны в маске.

Определите массив numpy (c нулями), равный форме изображения (на котором должна выполняться маскировка).
Определите свой ROI и нанесите его на маску (сделав круг или прямоугольник белого цвета).
Примените побитовую операцию И.

Первые два аргумента функции bitwise_and() должны быть изображением. Поскольку размеры маски и запроса не совпадают. Наконец, определите переменную маски в качестве третьего аргумента.


import numpy as np
import cv2
import sys

# Шаг 1
mask = np.zeros((300, 300), dtype = "uint8")

# Шаг 2
cv2.rectangle(mask, (50, 250), (150, 150), 255, -1)
cv2.rectangle(mask, (150, 150), (250, 50), 255, -1)
cv2.circle(mask, (75, 75), 50, 255, -1)
cv2.circle(mask, (225, 225), 50, 255, -1)

img = cv2.imread('image.png')
img = cv2.resize(img,(300,300),cv2.INTER_AREA)

bitwiseAnd = cv2.bitwise_and(img,img,mask=mask)

# Шаг 3
cv2.imshow("Masked image",bitwiseAnd)
cv2.waitKey(0)


Операции маскировки над изображениями с Python и OpenCV

Таким образом, мы применили побитовые операции применительно к изображению. И как видно, мы оставили только те области которые соответствуют очерченным фигурам.

Источник

Читайте также