Opencv python mask image

How to mask an image in OpenCV Python?

We can apply a mask to an image by computing the cv2.bitwise_and() between the mask and the image. To track a color, we define a mask in HSV color space using cv2.inRange() passing lower and upper limits of color values in HSV.

To track a part of the image we can define a mask using np.zeros() and slicing the entries with white (255) for the region in the input image to examine. Follow the given steps to mask an image −

  • The first step is to import required libraries. The required Python libraries are OpenCV, and NumPy. Make sure you have already installed them.
  • Next read the input image using cv2.imread() method. Convert the image BGR to HSV to track a color in the input image. To track a part of the image leave the image in BGR format.
  • Define a mask using cv2.inRange() to track a particular color in the image. Pass the lower and upper limits of color in HSV format. If you want to track the rectangular part of the input image, define a rectangular image (mask) with cv2.zeros(). Fill the entries of the mask with 255 to track the area in the original image.
  • Apply bitwise AND operation between the mask and the input image using cv2.bitwise_and().
  • Now display the mask and masked image.

We will use this image as the Input File in the following examples −

Читайте также:  Javascript unique elements in array

Example

In this Python program, we create a color mask to track yellow color in the input image. In this example we use HSV color space to get a color mask.

# import required libraries import cv2 import numpy as np # read input image img = cv2.imread('car.jpg') # Convert BGR to HSV hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # define range of blue color in HSV lower_yellow = np.array([15,50,180]) upper_yellow = np.array([40,255,255]) # Create a mask. Threshold the HSV image to get only yellow colors mask = cv2.inRange(hsv, lower_yellow, upper_yellow) # Bitwise-AND mask and original image result = cv2.bitwise_and(img,img, mask= mask) # display the mask and masked image cv2.imshow('Mask',mask) cv2.waitKey(0) cv2.imshow('Masked Image',result) cv2.waitKey(0) cv2.destroyAllWindows()

Output

When we run the above code two windows named ‘Mask‘ and ‘Masked Image‘ will open. ‘Mask‘ shows the mask to track the yellow color. ‘Masked Image‘ shows the tracked yellow color in the input image.

Example

In this Python program, we create a rectangular region as a mask. We want to track this rectangular part of the input image.

# import required libraries import cv2 import numpy as np # Read an input image as a gray image img = cv2.imread('car.jpg') # create a mask mask = np.zeros(img.shape[:2], np.uint8) mask[100:250, 150:450] = 255 # compute the bitwise AND using the mask masked_img = cv2.bitwise_and(img,img,mask = mask) # display the mask, and the output image cv2.imshow('Mask',mask) cv2.waitKey(0) cv2.imshow('Masked Image',masked_img) cv2.waitKey(0) cv2.destroyAllWindows()

Output

When we run the above code two windows named ‘Mask‘ and ‘Masked Image‘ will open. ‘Mask‘ shows the mask (rectangular region). ‘Masked Image‘ shows the tracked part in the input image.

Источник

Операции маскировки над изображениями с 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)

Изображение

Изображение

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

bitAnd = cv2.bitwise_and(rectangle, circle)

Изображение

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

bitOr = cv2.bitwise_or(rectangle, circle)

Изображение

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

Изображение

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

bitXor = cv2.bitwise_xor(rectangle, circle)

Изображение

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

Маскировка обычно выполняется с помощью побитовой функции И — 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)

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

Изображение

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

Создано 31.08.2021 10:46:28

  • Михаил Русаков
  • Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

    Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
    Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

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

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

    Комментарии ( 0 ):

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.

    Источник

    Оцените статью