opencv位平面分解

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,這樣可以有效提高亮度。

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章