【opencv-python】掩模操作mask和按位取并bitwise_and(),用法和作用机制

一、背景

最近在学习bitwise_and()的时候,发现这个参数mask的作用机制难懂。

二、官方文档

官网文档对它的解释是用来指定要改变的元素。

mask : optional operation mask, 8-bit single channel array, that specifies elements of the output array to be changed.

另外也提示了如果mask的对应元素不为0,那么最后结果只和src1和src2相关。 

【opencv-python】掩模操作mask和按位取并bitwise_and(),用法和作用机制_第1张图片

 三、测试代码

一定要确保参数mask的元素取值为0或1,也即掩模图像必须是二值化图像,不然就可能在掩模操作中出错,因为这里是“按位取与”操作,如果不是二值化,某些位的计算可能出现混乱。

如果打算把输出矩阵以返回值的方式取到(不把dst写进括号),mask最好用关键词参数形式传入,因为第三个参数顺势是dst(输出矩阵)。

当src1和src2不一样时,bitwise_and函数的作用就是将src1、src2、mask这三个参数对应的array,逐个元素求“与”(src1&src2&mask),然后得到结果。

import cv2
import numpy as np

src1 = np.array([[1, 1, 0, 0]]) 
src2 = np.array([[1, 0, 1, 0]]) 
mask1 = np.array([[1, 0, 0, 1]]) 

print(cv2.bitwise_and(src1, src2, mask=mask1))

# [[1 0 0 0]]

只有当mask的对应位置是1(白色),最后结果才可能是1(非黑);不然如果是0(黑色),最后结果就一定是0(黑色)。 

四、正确掩模mask用法 

一般来说,用到mask掩模操作时,就会使src1和src2相同,也即写成【cv2.bitwise_and(src1, src1, mask=mask1)】的形式。

import cv2
import numpy as np

src1 = np.array([[1, 1, 0, 0]]) 
mask1 = np.array([[1, 0, 0, 1]]) 

print(cv2.bitwise_and(src1, src1, mask1))

# [[1 0 0 0]]

你可能感兴趣的:(OpenCV,opencv,人工智能,计算机视觉)