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? !
60978×454 42.1 KB

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