- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我试过在不同的网站上搜索解释,但我没有得到一个完整解释的答案。
import cv2
import numpy as np
img1 = cv2.imread('3D-Matplotlib.png')
img2 = cv2.imread('mainlogo.png')
rows,cols,channels = img2.shape
roi = img1[0:rows, 0:cols ]
img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img2gray, 220, 255, cv2.THRESH_BINARY_INV)
mask_inv = cv2.bitwise_not(mask)
#why using similar argument two times?
img1_bg = cv2.bitwise_and(roi,roi,mask = mask_inv)
img2_fg = cv2.bitwise_and(img2,img2,mask = mask)
dst = cv2.add(img1_bg,img2_fg)
img1[0:rows, 0:cols ] = dst
cv2.imshow('res',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
最佳答案
我同意如果这行得通会更自然:
img1_bg = cv2.bitwise_and(roi, mask_inv) # will not work
#raises cv2.error: /modules/core/src/arithm.cpp:225: error: (-209:Sizes of input arguments do not match) The operation is neither 'array op array' (where arrays have the same size and type), nor 'array op scalar', nor 'scalar op array' in function 'binary_op'
第一个问题是为什么没有。问题是,roi
和 mask_inv
数组有不同的形状:(rows, cols, channels)
vs (rows, cols, 1)
。我猜想,OpenCV 库的作者想要防止静默形状转换,这可能是不安全的,并且会引入难以捕获的错误,因此决定实现检查,确保前两个参数具有相同的形状。
第二个问题是为什么这样做:
img1_bg = cv2.bitwise_and(roi, roi, mask_inv)
简而言之,答案是对于任何整数数组(如 roi
),
roi == cv2.bitwise_and(roi, roi)
这成立是因为 0 & 0 == 0
和 1 & 1 == 1
位。但是 cv2.bitwise_and
函数实际上是两个的组合:
在您呈现的这种典型用法中,未使用此函数的第一部分,这两个参数使这部分像标识一样工作,它不会更改数组。因此,您可以通过使前两个参数相等的技巧来绕过第一部分。第二部分是唯一的一部分,用于此典型用法。
附言请查看答案,链接在评论中以获取更多信息。
关于python - 为什么在 python cv2.bitwise 中使用类似的源参数?示例 :cv2. bitwise_and(roi,roi,mask = mask_inv),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57445397/
我在一个项目中有几行代码,我看不到...的值(value) buffer[i] = (currentByte & 0x7F) | (currentByte & 0x80); 它从文件中读取文件缓冲区,
为了调试目的,我在头文件中有以下程序代码。我的意图是在编译期间决定哪些消息应该打印到控制台端口,或者如果程序不是在 Debug模式下编译则根本不打印它们。 #define ALL 0xffffffff
这个问题看似重复,但实际上并非如此。我想知道如何将负数 (base-10) 转换为 32 位数字 (base-2)。例如base-10 中的 -9 相当于 base-2 中的 111111111111
如果只有AND和OR运算,如何进行XOR按位运算? 最佳答案 创建我自己的脚本语言-ChrisScript-您只需要以下内容: #!/bin/chrish bit XOR (bit A, bit B)
为什么按位非运算符(在大多数语言中为 ~)像这样转换以下值: -2 -> 1-1 -> 00 -> -11 -> -2 不应该-2转换为 2 , 1转换为 -1 , 等等。? 最佳答案 见 two's
如何使用按位运算符将两个整数相乘? 我找到了一个实现 here .有没有更好的方法来实现乘法? 例如:2 * 6 = 12 必须使用按位运算符执行。 注意:数字是任意的,不是 2 的幂 最佳答案 #i
我面临着一个相当奇怪的问题。我正在为不支持按位运算的体系结构开发编译器。然而,它处理带符号的 16 位整数算术,我想知道是否可以仅使用以下内容来实现按位运算: 加法 (c = a + b) 减法(c
遇到这样一道编程面试题。但对我来说,你怎么知道可以在这里使用位移位并不明显。好心人解释一下。谢谢。 数组的大小为 N,整数介于 0 和 1024 之间(允许重复)。另一个整数数组的大小为 M,对数
在 Pharo 中,我想对整数进行位掩码,在 Python 中如下所示: ((b1 & 0x3F) > 4) 我知道 & 和 | 在 Pharo 中工作,但我很确定它们不是按位的。 最佳答案 但你错了
if (!(y&1)) { c[x++]=d[--y]; } 我无法理解这个声明的作用。 y 是一个 int 值。 非 (!) 符号代表什么? 最佳答案 ! 将 0 转
我想知道类型转换在实践中是如何在类型之间进行的(在“嵌入式”C 中)。例如:如果我有一个 Signed 16-bit 数字,值为 -80d,11010000b,我想将它转换为 无符号 16 位。我
这是我的问题: 我正在 QtCreator 中编写一个程序来读取一些电池数据(电压、电流等)。每个值都以两个字节的形式传递,我必须将它们组合成一个 UINT16。有时我的程序会正确并显示正确的值(大约
我有一个简单的函数来测试两个数组是否互为逆数组。除了 tmp 变量外,它们看起来完全相同。一个有效,另一个无效。我一辈子都弄不明白为什么编译器会优化它——如果它确实是一个优化问题(我的编译器是 IAR
我正在开发我的第一个应用程序,其中包含多个用户的权限和角色。我的理解是最好的方法是使用 BitWise 格式。这是真的吗,还是有更好的选择? 这是我当前的测试代码,我得到了一个相当奇怪的效果。如果有人
在这里让我自己有点困惑。 我想测试一组位(3 位)是否包含某个位置的位。 if (B110 & B010 == B010) (B110 是要检查的数字,B010 是我想看看有没有的位) 上面的代码没有
我正在尝试将代码从 C 转换为 Lua,但遇到了问题。 如何在 Lua 中翻译按位与? 源 C 代码包含: if ((command&0x80)==0) ... 这怎么能在Lua中完成? 我正在
给定两个数字 L & R ,查找 L 和 R 之间的所有数字的按位与 约束 1<= L,R <= (2^32) . LL step = 1; while(L!=R) {
我完全期待投票,但这让我非常好奇,我希望至少有人能回答。我们的离散数学教授真的很喜欢旧语言,因为它们提供了大量的按位运算符。现在,他给了我们一个作业来确定以下 BASIC 语句的输出: PRINT (
我正在尝试实现以下部分中的功能:Per-commitment Secret Requirements . generate_from_seed(seed, I): P = seed f
A) int a[][]=new int[20][32]; a[2][3]=1; if(a[2][3]==1) { System.out.println("true");
我是一名优秀的程序员,十分优秀!