Adding an alpha channel to a Monochrome Image using Open CV Python

alpha, numpy, opencv, python

Solution

You cannot create a 2-channel "luminance-alpha" image, however you can convert the 1-channel grayscale image to BGRA using only gray values by duplicating the grayscale channel and adding the alpha channel to that. Let `l` be the grayscale image:

img_3gray = cv2.merge((l,l,l,a))

Nor can you apply an alpha channel to just one channel of an image, but you can take a single channel of the image (say, blue) and turn it into a grayscale image as we did before:

img_3blue = cv2.merge((b,b,b,a))

or you can display only the blue channel with alpha:

img_bzz = cv2.merge((b,z,z,a))

where `z` is all zeroes.

Problem

I have been working on colour images(RGB) and color images with an alpha channel(RGBA) . Reading an alpha channel from an RGBA image is pretty easy and I can even split the 4 channels of the image. Is there any method by which I can add an alpha channel to a monochrome or a grayscale image? Also, can alpha channel be separately added to the R,G,B Channels individually ? The code I am using to read a transparent image and split the channels is as follows - ``` import cv2 img = cv2.imread(image1_path,-1) b = img[:,:,0] g = img[:,:,1] r = img[:,:,2] a = img[:,:,3] img_merge = cv2.merge((b,g,r,a)) cv2.imshow("img_merge",img_merge) cv2.imshow("r channel",r) cv2.imshow("g channel",g) cv2.imshow("b channel",b) cv2.imshow("a channel",a) cv2.waitKey(0) cv2.destroyAllWindows() ``` The image I am using is -

Original source