Python 3.x 什么';OpenCV上的b/w(mask=mask)和(mask=mask\u reverse)之差是多少?
有人能指出他们在工作中的区别吗?我是OpenCV的新手,所以他们之间的工作有点混乱Python 3.x 什么';OpenCV上的b/w(mask=mask)和(mask=mask\u reverse)之差是多少?,python-3.x,opencv,computer-vision,Python 3.x,Opencv,Computer Vision,有人能指出他们在工作中的区别吗?我是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 =
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()
在您的代码中,
mask
是一个二进制图像,用于定义/获取图像中所需的区域。考虑
I2=cv2.bitwise_and(I1,mask)
由于mask
是二进制的,因此会发生这样的情况:如果mask
设置为0
,则图像I2
将为0。但是,如果将mask
设置为1
,则图像I2
将保留与I1
相同的内容
现在,正如@MH304所指出的,mask\u inv
就是这样定义的图像(使用binary\u not
):
这意味着
I3
将保留您以前从I1
到I2
中丢弃的所有内容。类似地,I3
将丢弃从I1
到I2
的所有使用内容。因此,从某种意义上说,I2
和I3
是互补的(例如,放弃背景)。我们如何知道你没有包括mask\u inv
和mask
的反定义:)我希望编辑可以解决这个问题。非常感谢。
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)