按位逻辑运算

《OpenCV轻松入门:面向Python》读书笔记
作者:李立宗
出版社:电子工业出版社
出版时间:2019-05

第3章 图像运算

3.3 按位逻辑运算

  逻辑运算是一种非常重要的运算方式,图像处理过程中经常要按照位进行逻辑运算,本节介绍OpenCV中的按位逻辑运算,简称位运算。
  按位运算是指将数值转换为二进制值后,在对应的位置上进行相应的运算

  • 按位与
    cv2.bitwise_and()
  • 按位或
    cv2.bitwise_or()
  • 按位异或
    cv2.bitwise_xor()
  • 按位取反
    cv2.bitwise_not()

1、按位与

按位与运算其语法格式为:

dst =cv2.bitwise_and(src1,src2,[mask] )

  • dst表示与输入值具有同样大小的array输出值。
  • src1、src2表示一个array或scalar类型的输入值。
  • mask表示可选操作掩码,8位单通道array。

2、按位与操作有如下特点:

  • 将任何数值N与数值0进行按位与操作,都会得到数值0。
  • 将任何数值N(这里仅考虑8位值)与数值255(8位二进制数是11111111)进行按位与操作,都会得到数值N本身。

3、掩模图像M

  根据上述特点,可以构造一幅掩模图像M,掩模图像M中只有两种值:一种是数值0,另外一种是数值255。将该掩模图像M与一幅灰度图像G进行按位与操作,在得到的结果图像R中:

  • 与掩模图像M中的数值255对应位置上的值,来源于灰度图像G。
  • 与掩模图像M中的数值0对应位置上的值为零(黑色)。

4、例程

【例3.8】构造一个掩模图像,使用按位与运算保留图像中被掩模指定的部分。

# -*- coding: utf-8 -*-

import cv2
import numpy  as np
a=cv2.imread("lena512.bmp",1)
b=np.zeros(a.shape,dtype=np.uint8)
b[100:400,200:400]=255
b[100:500,100:200]=255
c=cv2.bitwise_and(a,b)
print("a.shape=",a.shape)
print("b.shape=",b.shape)
cv2.imshow("a",a)
cv2.imshow("b",b)
cv2.imshow("c",c)
cv2.waitKey()
cv2.destroyAllWindows()

运行上述程序,输出结果如图3-5所示,左图是原始图像lena,中间的图是掩模图像,右图是按位与结果图像,可以看到,被掩模指定的头部图像被保留在了运算结果中。

你可能感兴趣的:(按位逻辑运算)