Channel change and blend method for image

I have use this method to image the image of 24bits (3 channels), but now the image change to 32bits with 4 channels, and it got this error , how can I edit it and use np.shape or other method? !

Blockquote
def detect_image(self, image):

    old_img = copy.deepcopy(image)

    orininal_h = np.array(image).shape[0]

    orininal_w = np.array(image).shape[1]

    image, nw, nh = self.letterbox_image(image,(self.model_image_size[1],self.model_image_size[0]))

    images = [np.array(image)/255]

    images = np.transpose(images,(0,3,1,2))

    with torch.no_grad():

        images = Variable(torch.from_numpy(images).type(torch.FloatTensor))

        if self.cuda:

            images =images.cuda()

        pr = self.net(images)[0]

        pr = F.softmax(pr.permute(1,2,0),dim = -1).cpu().numpy().argmax(axis=-1)

        pr = pr[int((self.model_image_size[0]-nh)//2):int((self.model_image_size[0]-nh)//2+nh), int((self.model_image_size[1]-nw)//2):int((self.model_image_size[1]-nw)//2+nw)]

    seg_img = np.zeros((np.shape(pr)[0],np.shape(pr)[1],3))

    for c in range(self.num_classes):

        seg_img[:,:,0] += ((pr[:,: ] == c )*( self.colors[c][0] )).astype('uint8')

        seg_img[:,:,1] += ((pr[:,: ] == c )*( self.colors[c][1] )).astype('uint8')

        seg_img[:,:,2] += ((pr[:,: ] == c )*( self.colors[c][2] )).astype('uint8')

    image = Image.fromarray(np.uint8(seg_img)).resize((orininal_w,orininal_h))

    if self.blend:

        image = Image.blend(old_img,image,0.7)

    

    return image

This error is raised by PIL, which gets unexpected images and cannot blend them.
Is the error raised in the forward pass of self.net?
If so, it seems you are using PIL methods inside the model, while you are also passing tensors to its forward. Could you explain the use case a bit?