OpenCV (3) --- получить важную часть изображения с помощью побитовой операции AND

OpenCV
OpenCV (3) --- получить важную часть изображения с помощью побитовой операции AND

Общие побитовые логические операции

В 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 выглядят следующим образом:

2.png

3.png

Маскируя изображение, желаемое изображение сохраняется

Теперь, когда мы получили изображение маски, мы можем напрямую вычислить его с помощью функции, предоставляемой 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()

После запуска эффект отображения выглядит следующим образом:

对比