Python 将numpy图像转换为PIL图像会产生奇怪的结果

Python 将numpy图像转换为PIL图像会产生奇怪的结果,python,django,image,opencv,python-imaging-library,Python,Django,Image,Opencv,Python Imaging Library,实际上,我需要将PIL图像保存到django,这就是为什么我要将numpy图像转换为枕头图像,但它给了我一个奇怪的图像。我试图转换图像使用下面的代码,这会给出奇怪的图像响应 from cv2 import cv2 import numpy as np import urllib.request from PIL import Image url = "https://upload.wikimedia.org/wikipedia/commons/

实际上,我需要将PIL图像保存到django,这就是为什么我要将numpy图像转换为枕头图像,但它给了我一个奇怪的图像。我试图转换图像使用下面的代码,这会给出奇怪的图像响应

    from cv2 import cv2
    import numpy as np
    import urllib.request
    from PIL import Image

    url = "https://upload.wikimedia.org/wikipedia/commons/thumb/a/a6/Deepika_Padukone_at_Tamasha_event.jpg/220px-Deepika_Padukone_at_Tamasha_event.jpg"
    resp = urllib.request.urlopen(url)
    img77 = np.asarray(bytearray(resp.read()), dtype="uint8")
    img77 = cv2.imdecode(img77, cv2.IMREAD_COLOR)


    ''' join image '''

    im_h = cv2.hconcat([img77, img77])



    ''' resize image '''
    print('Original Dimensions : ',im_h.shape)
    
    width = 1108 #554 #1108
    height = 584 #292 #584
    dim = (width, height)

    resized = cv2.resize(im_h, dim, interpolation = cv2.INTER_AREA)

    print('Resized Dimensions : ',resized.shape)
    


    ''' put similarity level '''
    img1 = resized
    img2 = cv2.imread('percentage_images\\15.png') # it's percentage image(.png)

    rows,cols,channels = img2.shape
    roi = img1[0:rows, 0:cols ]


    img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
    ret, mask = cv2.threshold(img2gray, 10, 255, cv2.THRESH_BINARY)
    mask_inv = cv2.bitwise_not(mask)


    img1_bg = cv2.bitwise_and(roi,roi,mask = mask_inv)


    img2_fg = cv2.bitwise_and(img2,img2,mask = mask)


    dst = cv2.add(img1_bg,img2_fg)
    img1[0:rows, 0:cols ] = dst

    nadu = Image.fromarray(img1,"RGB")
    print(nadu)
    nadu.save("what.jpg")


    # Image.fromarray(img1).convert("RGB").save("what2.jpg")

    cv2.imshow('res',img1)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    # cv2.imwrite('full_edit.jpg', img1)
图像转换从此-> 对此->

@HansHirse是的,我知道发生了什么,我们必须将cv2图像从BGR格式转换为RGB格式,只有在这之后,我们才能使用枕头库(使用RGB格式)进行处理

无法使用给定的代码再现错误(图像看起来很正确),但最有可能的是,错误与颜色通道顺序有关:OpenCV使用BGR颜色顺序,而几乎所有其他库都使用RGB颜色顺序。也许可以检查其他代码部分,这里可能没有显示。
img11 = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)#edited -> img1 to img11
nadu = Image.fromarray(img11) #edited -> img1 to img11