OpenCv图像处理——位平面分解

图像的位平面分解一般分为5个步骤:

1.图片预处理

2.构造提取矩阵

3.提取位平面

4.阈值处理

5.显示图像

以灰度图像的位平面分解为例,代码如下:

import cv2 
import numpy as np

demo = cv2.imread("demo.jpg", 0)
cv2.imshow("demo", demo)
r, c = demo.shape                          # 图像预处理
x = np.zeros((r, c, 8), dtype=np.uint8)    # 构造提取矩阵
for i in range(8):
    x[:,:,i] = 2**i
#print(x)

w = np.zeros((r, c, 8), dtype=np.uint8)
#print(r)

for i in range(8):
    w[:,:,i] = cv2.bitwise_and(demo, x[:,:,i]) # 提取位平面
    mask = w[:,:,i]>0                          # 阈值处理
    w[mask] = 255
    cv2.imshow(str(i), w[:,:,i])               # 显示图片
cv2.waitKey()
cv2.destroyAllWindows()

OpenCv图像处理——位平面分解_第1张图片     OpenCv图像处理——位平面分解_第2张图片    OpenCv图像处理——位平面分解_第3张图片

OpenCv图像处理——位平面分解_第4张图片       OpenCv图像处理——位平面分解_第5张图片   OpenCv图像处理——位平面分解_第6张图片

OpenCv图像处理——位平面分解_第7张图片        OpenCv图像处理——位平面分解_第8张图片    OpenCv图像处理——位平面分解_第9张图片

从图中可以看出左上角位原图,从上至下从左至右依次对应为第0-7个位平面,第0个位平面显示原图信息的效果最差权值最低,第7个权值最高。通常情况下第0层能量最低,在显示图像的时候作用最小,可以选择该层制作数字水印保存秘密信息。

你可能感兴趣的:(OpenCv图像处理——位平面分解)