【问题标题】:Converting numpy image to PIL image giving strange result将 numpy 图像转换为 PIL 图像给出奇怪的结果
【发布时间】:2020-09-29 05:23:32
【问题描述】:

实际上,我需要将 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)

从此图像转换-> 到这个->

【问题讨论】:

  • 无法使用给定的代码重现错误(图像看起来正确),但是,该错误很可能与有关颜色通道排序的某些问题有关: OpenCV 使用 BGR 颜色排序,而几乎所有其他库都使用 RGB 颜色排序。也许检查其他代码部分,这可能没有在这里显示。

标签: python django image opencv python-imaging-library


【解决方案1】:

@HansHirse 是的,我明白发生了什么,我们必须将 cv2 图像从 BGR 形式转换为 RGB 形式,然后才能使用枕头库(使用 RGB 形式)对其进行处理。

img11 = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)#edited -> img1 to img11
nadu = Image.fromarray(img11) #edited -> img1 to img11

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 2023-04-07
    • 2010-09-27
    • 2016-05-29
    • 1970-01-01
    相关资源
    最近更新 更多