Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 什么';OpenCV上的b/w(mask=mask)和(mask=mask\u reverse)之差是多少?_Python 3.x_Opencv_Computer Vision - Fatal编程技术网

Python 3.x 什么';OpenCV上的b/w(mask=mask)和(mask=mask\u reverse)之差是多少?

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 =

有人能指出他们在工作中的区别吗?我是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()

在您的代码中,
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)