cv2中bitwise_and()

参考文档:

  1. opencv tutorial
  2. opencv 官方文档
  3. stackoverflow question

没有多少文档能讲清楚具体是如何计算的。在stackoverflow中的这个问题,第一个高赞答案也只是选取了最普通的一种情况,也就是当image的pixel的值全部是0或者1的时候,and的运算。但是cv2中的bitwise_and()还有一个很重要的参数mask并没有讲清楚,并且当image的像素值有除了0或者1以外的其他值,这时候该如何运算?

官方文档中说mask是决定了哪些位置要进行运算,当mask中某个元素不为0时,我们对相应位置的像素做“与”运算,如果scr1和scr2(bitwise_and的两个参数)的值不是0或者1,会将十进制的值转化为2进制,然后对二进制再进行运算,运算完了之后又会转化为十进制(参考) 当mask相应位置的值=0时,任何操作都不会做,不仅如此,结果的图片相应位置的像素值会变成0,也就是黑色(这一点官方文档没说).

所以经过bitwise_and之后的图片会看到mask中像素值为0的地方全部是黑色。这就相应的把mask中不为0的地方强调突出了。