代码语言:javascript复制
import cv2
import numpy as np
img=cv2.imread('C:/Users/xpp/Desktop/Lena.png',0)#原始图像
cv2.imshow("img",img)
r,c=img.shape#图像的行和列
x=np.zeros((r,c,8),dtype=np.uint8)#图像的行
r=np.zeros((r,c,8),dtype=np.uint8)#图像的列
for i in range(8):
x[:,:,i]=2**i
for i in range(8):
r[:,:,i]=cv2.bitwise_and(img,x[:,:,i])#按与位运算
mask=r[:,:,i]>0
r[mask]=255
cv2.imshow(str(i),r[:,:,i])
cv2.waitKey()
cv2.destroyAllWindows()
算法:位平面分解图像是将灰度图像中处于同一比特位上的二进制像素值进行组合,得到一幅二进制值图像,该图像被称为灰度图像的一个位平面。
例子:
在8位灰度图中,每一个像素使用8位二进制值来表示,其值的范围在[0,255]之间。
对应的二进制值:
十进制209-二进制1101 0001
8个位平面分解:
1101 0001-1000 1011
其中的值表示为:value=a7×2^7 a6×2^6 a5×2^5 a4×2^4 a3×2^3 a2×2^2 a1×2^1 a0×2^0
每次提取位平面后,要想让二值位平面能够以黑白颜色显示出来,就要将得到的二值位平面进行阈值处理,将其中大于零的值处理为255。
注意:第0个位平面,第0个位平面位于8位二进制值的最低位,其权重最低,对像素值的影响最小,所以一般显示出来的是一幅杂乱无章的图像。