Общие побитовые логические операции
В OpenCV общие функции побитовых операций показаны в следующей таблице:
Имя функции | значение |
---|---|
bitwise_and() | побитовое И |
bitwise_or() | побитовое ИЛИ |
bitwise_xor() | Побитовое исключающее ИЛИ |
bitwise_not() | побитовое отрицание |
побитовое И
В математике операция побитового И в простом обобщении такова: только когда соответствующие два двоичных бита равны 1, результирующий бит равен 1. В python побитовая операция И выполняется символом «&», а конкретные результаты операции следующие:
считать 1 | считать 2 | результат | Соответствующий код Python |
---|---|---|---|
0 | 0 | 0 | 0&0 |
0 | 1 | 0 | 0&1 |
1 | 0 | 0 | 1&0 |
1 | 1 | 1 | 1&1 |
Побитовая операция И предназначена для выполнения операции над соответствующей позицией после преобразования значения в двоичное. Например, здесь блогер случайным образом берет два данных, и результаты расчета следующие:
|Числовой |Десятичный |Двоичный Результат | |--|--|--|--| |Номер1|165|10100101| |Номер2|122|01111010| |Результаты|32|00100000|
изображение маски
Чтобы получить изображение маски, нам нужно сначала ввести функцию побитового И в OpenCV: cv2.bitwise_and(). Его особый синтаксис:
dst=cv2.bitwise_and(src1,src2[,mask])
dst: указывает, что входное значение имеет тот же размер, что и выходное значение массива. src1: представляет входное значение первого массива или скалярного типа. src2: представляет входное значение второго массива или скалярного типа. маска: указывает дополнительную маску операции, 8-битный одноканальный массив
Благодаря приведенному выше побитовому И-вычислению мы знаем, что любое изображение не равно 0, если оно не черное. Итак, мы побитово И черный 0 с любым числом, и мы получаем 1. Таким образом, мы можем удалить ту часть, которую не хотим показывать.
Во-первых, нам нужно создать изображение маски, конкретный код выглядит следующим образом:
a = cv2.imread("2_2.png", 1)
b=np.zeros(a.shape,dtype=np.uint8)
b[100:400,200:400]=255
Здесь b — изображение маски, а часть, показанная белым цветом, — это часть изображения, которую нам нужно перехватить. Здесь [100:400, 200:400] можно представить изображение как систему координат, верхний левый угол (100, 200), нижний правый угол (200, 400).
После запуска изображение маски b и исходное изображение a выглядят следующим образом:
Маскируя изображение, желаемое изображение сохраняется
Теперь, когда мы получили изображение маски, мы можем напрямую вычислить его с помощью функции, предоставляемой OpenCV, Конкретный код выглядит следующим образом:
import cv2
import numpy as np
a = cv2.imread("2_2.png", 1)
b=np.zeros(a.shape,dtype=np.uint8)
b[100:400,200:400]=255
c=cv2.bitwise_and(a,b)
cv2.imshow("a", a)
cv2.imshow("b", b)
cv2.imshow("c", c)
cv2.waitKey()
cv2.destroyAllWindows()
После запуска эффект отображения выглядит следующим образом: