【发布时间】: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