import cv2
import numpy as np
lena=cv2.imread("D:\lena.jpg",0)
cv2.imshow("lena",lena)
r,c=lena.shape#所讀圖像的行列
x=np.zeros((r,c,8),dtype=np.uint8)
for i in range(8):
x[:,:,i]=2**i#表示2的i次方
r=np.zeros((r,c,8),dtype=np.uint8)
for i in range(8):
r[:,:,i]=cv2.bitwise_and(lena, x[:,:,i])
mask=r[:,:,i]>0
r[mask]=255 #將像素值大於0的都設爲255,目的在於提高亮度,否在值過低就接近黑色了
cv2.imshow(str(i),r[:,:,i])
cv2.waitKey()
cv2.destroyAllWindows()
解釋:x是一個r*c*8的矩陣,通俗的說就是有8個r*c的面,首先對每個面的每個值進行賦值,第一個面全部賦值2^0,第二個面賦值
2^1,以此類推,八個面賦值2^7,此時,如果把這8個面分別與lena.jpg圖像相與,會得到八個圖像,第一個圖像提取的像素值
(八進制)的倒數第一位,第二個圖像提取的是像素值的倒數第二位,以此類推,第八個圖像提取的是像素值的第一位,由於提取過後的像素值(十進制)可能接近於1,也就是接近黑色,所以爲了更好顯示出來,把這些大於1的像素值賦值爲255,這樣可以有效提高亮度。