How to remove 4th channel from PNG images
16,845
You need to check for the number of channels from img.shape
and then proceed accordingly:
# In case of grayScale images the len(img.shape) == 2
if len(img.shape) > 2 and img.shape[2] == 4:
#convert the image from RGBA2RGB
img = cv2.cvtColor(img, cv2.COLOR_BGRA2BGR)
Author by
Anthony
Updated on July 29, 2022Comments
-
Anthony almost 2 years
I am loading images from a URL in OpenCV. Some images are PNG and have four channels. I am looking for a way to remove the 4th channel, if it exists.
This is how I load the image:
def read_image_from_url(self, imgurl): req = urllib.urlopen(imgurl) arr = np.asarray(bytearray(req.read()), dtype=np.uint8) return cv2.imdecode(arr,-1) # 'load it as it is'
I don't want to change the
cv2.imdecode(arr,-1)
but instead I want to check whether the loaded image has a fourth channel, and if so, remove it.Something like this but I don't know how to actually remove the 4th channel
def read_image_from_url(self, imgurl): req = urllib.urlopen(imgurl) arr = np.asarray(bytearray(req.read()), dtype=np.uint8) image = cv2.imdecode(arr,-1) # 'load it as it is' s = image.shape #check if third tuple of s is 4 #if it is 4 then remove the 4th channel and return the image.
-
Anthony about 8 yearsYeah, there are certain images that I want AS -IS. thats why I'm reluctant to change the flag but instead do a check if there is a 4th layer and only then remove it.
-
Piglet about 8 yearsthen you should ask how to check if there is a 4th channel, not how to remove it...
-
Gil Hiram over 6 yearsthis flag will also impact bit depth so that is not a good solution for removing the alpha channel