Python 将numpy图像转换为PIL图像会产生奇怪的结果
实际上,我需要将PIL图像保存到django,这就是为什么我要将numpy图像转换为枕头图像,但它给了我一个奇怪的图像。我试图转换图像使用下面的代码,这会给出奇怪的图像响应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/
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