在OpenCV中是一个按位和操作掩码

时间:2017-03-21 07:31:51

标签: c++ opencv

我从python中的opencv开始,我对如何应用

的掩码有疑问

bitwise_and(src1, src2, mask=mask)

其中哪些描述了实施:

  • 一个。所有按位,首先掩码

    1. src1与掩码进行AND运算
    2. src2与掩码进行AND运算
    3. src1和src2的剩余部分是ANDed在一起
  • B中。所有按位,图像首先

    1. src1与src2进行AND运算
    2. 结果与掩码进行AND运算
  • ℃。条件AND

    1. 掩码“迭代”通过(例如循环)
    2. 对于掩码中的每个像素,如果它非零,则src1,src2中的相应像素被AND并复制到输出

我认为每种产品的性能特征可能略有不同。

实际实施中的哪些(或其他方式)? (以及为什么,如果我可能会问)

我试图查看来源,但无法弄清楚他们做了什么: https://github.com/opencv/opencv/blob/ca0b6fbb952899a1c7de91b909d3acd8e682cedf/modules/core/src/arithm.cpp

2 个答案:

答案 0 :(得分:2)

我使用彩色图像和二进制图像计算了cv2.bitwise_and()的两个实现。

<强> 1。使用二进制图像

我们假设我们有以下二进制图像:

屏幕1:

enter image description here

屏幕2:

enter image description here

按位执行:

fin = cv2.bitwise_and(screen1, screen2)
cv2.imwrite("Final image.jpg", fin)

我们获得以下内容:

enter image description here

<强> 2。对彩色图像执行屏蔽:

您也可以使用相同的功能屏蔽特定彩色图像的某个区域。

考虑以下图片:

enter image description here

并考虑 Screen 1 (上面给出)作为面具

fin = cv2.bitwise_and(image, image, mask = screen1)
cv2.imwrite("Masked image.jpg", fin)

给你:

enter image description here

注意: 执行按位AND操作时,图像必须具有相同的大小

答案 1 :(得分:0)

如果查看文档,第3个参数是您错过的目标图像。

此操作仅在掩码显示时才更改目标图像的值(在这种情况下,它将按位和两个源图像执行)。对于不在掩码中的像素,目标将包含之前包含的相同值。