今天在實作影像疊加的時候
先是提取了每個BIT-PLANE
然後想把它疊加起來回原圖的時候不知道為甚麼越來淡
本人是新手有點摸不著頭緒
也試著用過addWeighted也沒用
麻煩大大們解惑
補充:
我是想將bit plane8為基礎逐一疊加回去~
我怕我敘述不太完整
謝謝!!
下面是程式碼
更新:
如果用bitwise_and會呈現
i=7
while(i-1>=0):
r[:,:,7] = cv2.bitwise_and(r[:,:,7],r[:,:,i-1])
cv2.imshow(str(i), r[:,:,7])
showImage(str(i), r[:,:,7])
i=i-1
cv2.waitKey()
cv2.destroyAllWindows()
import cv2
import numpy as np
def showImage(title, img):
ishow = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # for plt.imshow()
plt.imshow(ishow)
plt.axis('off')
plt.title(title)
plt.show()
#讀取灰階影像
lena = cv2.imread("lena.png", 0)
cv2.imshow("lena", lena)
showImage("lena", lena)
#取出影像 rows and cols
r, c = lena.shape
#產生 8 個 bit-plane 對應的 mask
x = np.zeros((r,c,8), dtype = np.uint8)
for i in range(8):
x[:,:,i] = 2**i
#建立 8 個空白的 bit-planes
r = np.zeros((r,c,8), dtype = np.uint8)
#建立相對應的 bit-planes
for i in range(8):
r[:,:,i] = cv2.bitwise_and(lena, x[:,:,i])
mask = r[:,:,i] > 0
r[mask] = 255
cv2.imshow(str(i), r[:,:,i])
showImage(str(i), r[:,:,i])
i=7
while(i-1>=0):
r[:,:,7] = cv2.add(r[:,:,7],r[:,:,i-1])
cv2.imshow(str(i), r[:,:,7])
showImage(str(i), r[:,:,7])
i=i-1
cv2.waitKey()
cv2.destroyAllWindows()
還是答一下:
import numpy as np
import cv2
lena = cv2.imread('lena.png', 0)
cv2.imshow('lena', lena)
cv2.waitKey()
r, c = lena.shape
x = np.zeros((r, c, 8), dtype=np.uint8)
for i in range(8):
x[:, :, i] = 2 ** i
r1 = np.zeros((r, c, 8), dtype=np.uint8)
for i in range(8):
r1[:, :, i] = cv2.bitwise_and(lena, x[:, :, i])
cv2.imshow(str(i), r1[:, :, i])
cv2.waitKey()
d = np.zeros((r, c), dtype=np.uint8)
for i in range(8):
d = cv2.add(d, r1[:, :, 7-i])
cv2.imshow(str(i), d)
cv2.waitKey()
cv2.destroyAllWindows()
這樣其實就可以看到效果。你要知道灰階的格式,每個pixel是8bit,0是黑色,255是白色。所以只取越低的bit,構成的灰階圖顏色越深,甚至會看不清楚。你原先的:
mask = r[:, :, i] > 0
r[mask] = 255
是只要有某個bit值為1,結果就是255(白色),整張圖會變成黑白,這樣可以比較清楚看到切開來的bit。這只是要在圖裡面突顯運算的結果,並不是實際的狀況,改了你原來的東西的話,你就無法復原。因為其實只是要在圖裡面突顯運算結果,你其實可以用np.copy()
複製結果來處理,這樣就不會動到原來的變數。