В чем разница ч / б (маска = маска) и (маска = маска_инверсия) в OpenCV? - PullRequest
0 голосов
/ 25 января 2020

Может кто-нибудь указать на разницу в работе между ними? Я новичок ie в OpenCV, поэтому между ними немного путаницы.

import cv2
import numpy as np
img1 = cv2.imread('D:\Downloads_Chrome\python.png',cv2.IMREAD_COLOR)
img2 = cv2.imread('D:\Downloads_Chrome\graph2.jpeg',cv2.IMREAD_COLOR)
rows, cols, channel = img1.shape
roi = img2[0:rows, 0:cols]
img1_2gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img1_2gray, 220, 255, cv2.THRESH_BINARY_INV)
mask_inv = cv2.bitwise_not(mask)
img2_bg = cv2.bitwise_and(roi,roi,mask=mask_inv)
img1_fg = cv2.bitwise_and(img1,img1,mask=mask)
dest = cv2.add(img2_bg, img1_fg)
img2[0:rows, 0:cols] = dest
cv2.imshow('res',img2)
cv2.imshow('mask_inv',mask_inv)
cv2.imshow('mask',mask)
cv2.imshow('img2_bg',img2_bg)
cv2.imshow('img1_fg',img1_fg)
cv2.imshow('dest',dest)
cv2.imshow('img1_2gray',img1_2gray)
cv2.imshow('image1',img1)
#cv2.imshow('image2',img2)
if cv2.waitKey(0):
    cv2.destroyAllWindows()

1 Ответ

1 голос
/ 26 января 2020

В вашем коде mask, который является двоичным изображением, используется для определения / получения области, которую вы хотите в изображении. Рассмотрим

I2=cv2.bitwise_and(I1,mask)

Поскольку mask является двоичным, это то, что произойдет: везде mask установлено на 0, изображение I2 будет равно 0. Однако везде mask при значении 1 изображение I2 будет сохранять то же содержимое, что и I1.

Теперь, как указывало @ MH304, mask_inv просто и изображение определяется следующим образом (используя binary_not ):

mask_inv[i,j]=0  <=> mask[i,j]=1
mask_inv[i,j]=1  <=> mask[i,j]=0
#or equivalently, mask_inv[i,j]=1-mask[i,j]

Таким образом, выполнение

I3=cv2.bitwise_and(I1,mask_inv)

будет означать, что I3 сохранит все, что вы сбросили с I1, чтобы сформировать I2 ранее. Точно так же I3 откажется от всего, что вы использовали с I1 для формирования I2. В некотором смысле I2 и I3 являются дополнениями ( например forground / background).

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