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

Обработка изображений Часть 5: Арифметика, побитовое и маскировка

В этой 5-й части серии обработки изображений мы больше обсуждаем арифметические и побитовые операции и маскировка изображений в Python. это

Автор оригинала: Pankaj Kumar.

В этой 5-й части серии обработки изображений мы больше обсуждаем арифметические и побитовые операции и маскировка изображений в Python.

Рекомендуется пройти предыдущие статьи, прежде чем запустить в маске обучения здесь.

Настройка среды

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

Помогает уменьшить беспорядок 🙂

# importing numpy to work with pixels
import numpy as np

# importing argument parsers
import argparse

# importing the OpenCV module
import cv2


# initializing an argument parser object
ap = argparse.ArgumentParser()

# adding the argument, providing the user an option
# to input the path of the image
ap.add_argument("-i", "--image", required=True, help="Path to the image")

# parsing the argument
args = vars(ap.parse_args())

# reading the image location through args
# and reading the image using cv2.imread
image = cv2.imread(args["image"])

Арифметические операции на изображениях с помощью Python

Арифметические операции позволяют нам улучшить массу аспектов изображения.

Мы можем работать с освещением, тенями, красным, синим и зеленым цветовым улучшением цвета.

Множество фильтров изображений на приложениях используют тот же метод для изменения и украшения фотографий.

Итак, давайте начнем со всем кодом!

Во-первых, чтобы понять, может ли предел может пройти 255 или 0, мы можем провести простой тест, который предоставляет нам 255 и 0 Отказ

# printing out details of image min, max and the wrap around
print("max of 255 :", str(cv2.add(np.uint8([200]), np.uint8([100]))))
print("min of 0 :", str(cv2.subtract(np.uint8([50]), np.uint8([100]))))

print("wrap around :", str(np.uint8([200]) + np.uint8([100])))
print("wrap around :", str(np.uint8([50]) - np.uint8([100])))

В этом примере мы увеличиваем интенсивность всех пикселей на изображении на 100.

# adding pixels of value 255 (white) to the image
M = np.ones(image.shape, dtype="uint8") * 100
added = cv2.add(image, M)
cv2.imshow("Added", added)
cv2.waitKey(0)

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

Если мы хотим темнеть изображение, мы вычитаем из значения пикселей изображения, как показано ниже,

# adding pixels of value 0 (black) to the image
M = np.ones(image.shape, dtype="uint8") * 50
subtracted = cv2.subtract(image, M)
cv2.imshow("Subtracted", subtracted)
cv2.waitKey(0)

Это должно обеспечить вам два разных варианта исходного изображения, один светлее, а другой темнее.

Побитовые операции

Мы используем битовые операции много времени, пытаясь замаскировать изображения.

Эта особенность OpenCV позволяет отфильтровывать часть изображения, которая имеет отношение к нам.

Установка

Чтобы работать на битовых операциях, сначала понадобится две переменные или изображения, которые мы можем проводить операции.

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

Обратите внимание, что битовые операции требуют, чтобы изображения были черными и белыми.

# creating a square of zeros using a variable
rectangle = np.zeros((300, 300), dtype="uint8")
cv2.rectangle(rectangle, (25, 25), (275, 275), 255, -1)
cv2.imshow("Rectangle : ", rectangle)

# creating a circle of zeros using a variable
circle = np.zeros((300, 300), dtype="uint8")
cv2.circle(circle, (150, 150), 150, 255, -1)
cv2.imshow("Circle : ", circle)

Выходные изображения, которые вы получаете, должен выглядеть так,

  • Битовая площадь
  • Битовый круг

Объединить с и операцией

Добавление побитового питания относится к добавлению двух разных изображений и решает, какие должны отображаться с помощью И Работа на каждом пикселе изображений.

# the bitwise_and function executes the AND operation
# on both the images
bitwiseAnd = cv2.bitwise_and(rectangle, circle)
cv2.imshow("AND", bitwiseAnd)
cv2.waitKey(0)

Побитовое добавление как круга, так и квадрата дает нам выход, который должен выглядеть так,

Учитывая выбор с помощью или операцией

Побито или предоставляет нам продукт двух изображений с Или Операция выполняется на каждом пикселе изображений.

# the bitwise_or function executes the OR operation
# on both the images
bitwiseOr = cv2.bitwise_or(rectangle, circle)
cv2.imshow("OR", bitwiseOr)
cv2.waitKey(0)

После выполнения операции побитовой или, вы должны получить что-то вроде этого,

Эксклюзивность с работой XOR

Другая операция, которая предоставляется CV2 Модуль – это операция XOR, которую мы можем использовать через BitWise_xor функция.

# the bitwise_xor function executes the XOR operation
# on both the images
bitwiseXor = cv2.bitwise_xor(rectangle, circle)
cv2.imshow("XOR", bitwiseXor)
cv2.waitKey(0)

Отрицание с использованием не работает

Наконец, у нас есть операция отрицания, которая выполняется с использованием Битона_но функция.

Не работает только одно изображение, так как мы не добавляем или вычитаем здесь.

Мы все еще используем его на обоих здесь, это также вариант.

# the bitwise_not function executes the NOT operation
# on both the images
bitwiseNot = cv2.bitwise_not(rectangle, circle)
cv2.imshow("NOT", bitwiseNot)
cv2.waitKey(0)

Круг находится внутри квадрата в этом случае, а как таковые не видны,

Маскировка изображений с использованием Python Opencv

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

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

Итак, давайте начнем с маскировкой!

Процесс маскировки изображений

У нас есть три шага в маскировке.

  1. Создание черный Холст с одинаковыми размерами, что и изображение, и называя его как Маска Отказ
  2. Изменение значений маски, рисуя любую цифру на изображении и предоставлением его Белый цвет.
  3. Выполнение побитовой операции добавления на изображение с маской.

После того же процесса давайте создадим несколько масок и используем их на нашем изображении.

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

# creating a mask of that has the same dimensions of the image
# where each pixel is valued at 0
mask = np.zeros(image.shape[:2], dtype="uint8")

# creating a rectangle on the mask
# where the pixels are valued at 255
cv2.rectangle(mask, (0, 90), (290, 450), 255, -1)
cv2.imshow("Mask", mask)

# performing a bitwise_and with the image and the mask
masked = cv2.bitwise_and(image, image, mask=mask)
cv2.imshow("Mask applied to Image", masked)
cv2.waitKey(0)

Теперь давайте попробуем его с помощью круговой маски.

# creating a mask of that has the same dimensions of the image
# where each pixel is valued at 0
mask = np.zeros(image.shape[:2], dtype="uint8")

# creating a rectangle on the mask
# where the pixels are valued at 255
cv2.circle(mask, (145, 200), 100, 255, -1)
cv2.imshow("Mask", mask)

# performing a bitwise_and with the image and the mask
masked = cv2.bitwise_and(image, image, mask=mask)
cv2.imshow("Mask applied to Image", masked)
cv2.waitKey(0)

Если все работает просто хорошо, мы должны получать выходы, которые выглядят что-то подобное,

  • Прямоугольная маска
  • Круговая маска

Заключение

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

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

Мы продолжаем в достойном темпе, но, если вы хотите пропустить время и дойти до конца, будь моим гостем!

Вот статьи, которые позволяют вам посмотреть в OpenCV и распознавание лица, а также реализацию Java Android и Camerax Openc.

Рекомендации