簡體   English   中英

將圖像灰度像素值轉換為 alpha 值

[英]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中。
  • 對於混合,我們必須將圖像從 uint 轉換為浮點數,但是一旦完成,我們希望再次擁有 uint。

但是,如果這是您所追求的,請在谷歌上搜索“阿爾法混合”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM