如何从PNG图像中删除第4个通道

时间:2016-04-26 17:57:25

标签: python opencv image-processing png

我正在从OpenCV中的URL加载图像。有些图像是PNG,有四个通道。我正在寻找一种方法来删除第四个通道,如果它存在。

这是我加载图片的方式:

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'

我不想更改cv2.imdecode(arr,-1),而是想检查加载的图像是否有第四个通道,如果是,请将其删除。

这样的东西,但我不知道如何实际删除第4个频道

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. 

2 个答案:

答案 0 :(得分:4)

您需要检查来自img.shape的频道数量,然后相应地继续:

# 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)

答案 1 :(得分:0)

阅读本文:http://docs.opencv.org/2.4/modules/highgui/doc/reading_and_writing_images_and_video.html

cv2.imdecode(buf,flags)

如果标志是<如你的情况(0)0你将得到原样的图像。 如果标志是> 0它将返回3通道图像。 alpha通道被剥离。 flags == 0将产生灰度图像

cv2.imdecode(arr,1)应该会产生3声道输出。