[英]Converting image grayscale pixel values to alpha values
是否可以使用 OpenCV、Pillow 和 scikit-image 等庫在 python 中將圖像灰度像素值轉換為 alpha 值?
這是一個使用 OpenCV 的測試程序:
path = "e:/python/sampleImage.tif"
src = cv2.imread(path, -1)
print("shape: ",src.shape)
print("co_pixel value3: ",src[970,1000])
cv2.imshow("Displaying only blue channels",src)
cv2.waitKey(0)
cv2.destroyAllWindows()
嘗試將您的灰度圖像轉換為 BGRA。 然后將灰色圖像復制為 alpha。 然后將 alpha 圖像放入 3 通道(BGR)灰度圖像的 alpha 通道中。
alpha = src.copy()
src = cv2.cvtColor(src, cv2.COLOR_GRAY2BGRA)
src[:,:,3] = alpha
具有 alpha 通道的圖像只是具有 4 個通道的圖像:3 種顏色(OpenCV 中的 B、G、R)和 alpha 通道。 所以假設你有你的彩色圖像src
。 然后
import numpy as np
gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
img_w_alpha = np.dstack( (src, gray) )
np.dstack
將 alpha 通道作為第四個通道添加到您的彩色圖像中。
我不明白,為什么你想要這樣做,所以如果這不能回答你的問題,也許你需要詳細說明。
編輯:按照您的評論,也許您正在尋找 alpha 混合?
import cv2
# Load the tiff
tif = cv2.imread('tmp/Nixon.tif')
h,w,c = tif.shape
alpha = cv2.cvtColor(tif, cv2.COLOR_BGR2GRAY)
tif_a = cv2.cvtColor(tif, cv2.COLOR_BGR2BGRA)
tif_a[:,:,3] = alpha # now you have an image whose alpha channel equals the greyscale values,
# but I'm not sure what good that is
# load a background image
img = cv2.imread('tmp/PA110602.JPG')
img = cv2.resize(img, (w,h)) # for blending, both images need to be of same size
# blend the two images, using the greyscale version of tif as alpha values
blend = cv2.add(
alpha.reshape((*alpha.shape,1))/255.0*tif.astype(float),
(1.0-alpha.reshape((*alpha.shape,1))/255.0)*img.astype(float),
dtype=cv2.CV_8UC1)
如您所見,在尼克松的圖像幾乎是黑色的地方,例如在他的夾克和頭發上,背景圖像是可見的,而在尼克松圖像明亮的地方,例如他的領子和臉,背景圖像幾乎不可見。
混合的代碼看起來很別扭,因為
h-by-w
與圖像h-by-w-by-c
圖像,但我們可以乘一個h-by-w-by-1
圖像與h-by-w-by-c
圖像,因此我們必須使用reshape
將維度添加到alpha
中。但是,如果這是您所追求的,請在谷歌上搜索“阿爾法混合”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.