这里用第二种÷的方法实现
如果用第一种与的方法的话,只需要将中间的代码段替换成后面的就行,结果是一样的
import cv2
import numpy as np
gray = cv2.imread('./img.jpg',0)
img = cv2.resize(gray,None,fx = 0.5,fy = 0.5,interpolation=cv2.INTER_AREA) #缩小图像
group = [] # 存放每一层的图像
for n in range(8):
dst = np.zeros_like(img)
for i in range(img.shape[0]):
for j in range(img.shape[1]):
ret = img[j] // pow(2,n) #ret = img[j] & pow(2,n)
if (ret % 2) ==1: # if (ret ==pow(2,n)):
dst[j] = 255
else:
dst[j] = 0
group.append(dst)
cv2.imshow('0-3',np.hstack((i for i in group[:4])))
cv2.imshow('4-7',np.hstack((i for i in group[4:])))
cv2.waitKey()
cv2.destroyAllWindows()输入图像:
输出结果:
4. 比特平面重建图像
如果还原图像的话,我们再输出图像的时候,就不要映射到255,之间将图像与比特平面相与的结果输出即可
import cv2
import numpy as np
gray = cv2.imread('./img.jpg',0)
img = cv2.resize(gray,None,fx = 0.5,fy = 0.5,interpolation=cv2.INTER_AREA) #缩小图像
group = [] # 存放每一层的图像
for n in range(8):
dst = np.zeros_like(img)
for i in range(img.shape[0]):
for j in range(img.shape[1]):
ret = img[j] & pow(2,n)
dst[j] = ret # 将与的结果作为图像
group.append(dst)
cv2.imshow('0-3',np.hstack((i for i in group[:4])))
cv2.imshow('4-7',np.hstack((i for i in group[4:])))
a = np.zeros_like(img) # 还原
for i in group:
a += i
cv2.imshow('img',a)
cv2.waitKey()
cv2.destroyAllWindows()输出比特平面: