Python用image.paste进行图像处理,粘贴原图的裁剪区域,是黑色的一块

贴图时发现贴图后,这片区域是黑的一片,就是下面的代码,效果如下图

from PIL import Image
import matplotlib.pyplot as plt
import cv2
im = Image.open('./kun/1.png')
# im = Image.open('校徽.jpg')
ims = Image.open('k.jpg')
im.paste(ims,(0,0))
plt.imshow(im)
plt.show()

Python用image.paste进行图像处理,粘贴原图的裁剪区域,是黑色的一块_第1张图片

现在更换背景图片,发现显示正常。

from PIL import Image
import matplotlib.pyplot as plt
import cv2
# im = Image.open('./kun/1.png')
im = Image.open('校徽.jpg')
ims = Image.open('k.jpg')
im.paste(ims,(0,0))
plt.imshow(im)
plt.show()

Python用image.paste进行图像处理,粘贴原图的裁剪区域,是黑色的一块_第2张图片

from PIL import Image
import matplotlib.pyplot as plt
import cv2
# im = Image.open('./kun/1.png')
# im = Image.open('校徽.jpg')
im = Image.open('南中.png')
ims = Image.open('k.jpg')
im.paste(ims,(0,0))
plt.imshow(im)
plt.show()

Python用image.paste进行图像处理,粘贴原图的裁剪区域,是黑色的一块_第3张图片

一样的代码,只有背景图片不一样,结果就不一样,所以怀疑是图片的原因,下面分别输出三张图片的信息。

from PIL import Image
import matplotlib.pyplot as plt
import cv2
im = Image.open('./kun/1.png')
im2 = Image.open('校徽.jpg')
im3 = Image.open('南中.png')
def s(x):
    print(x.format,x.mode,x.size)
s(im)
s(im2)
s(im3)

Python用image.paste进行图像处理,粘贴原图的裁剪区域,是黑色的一块_第4张图片

分析三张图片的信息后可以大概确定是由于第一张图片的mode是P的原因。

下面使用Image.convert(mode)方法,对图片的mode进行转变,看猜想是否成立。

from PIL import Image
import matplotlib.pyplot as plt
import cv2
im = Image.open('./kun/1.png')
# im = Image.open('校徽.jpg')
# im = Image.open('南中.png')

print(im.mode) # P
im = im.convert('RGB') # 注意im重新进行赋值

# 或者 
# new_im = im.convert('RGB')
# 以new_im为背景进行贴图

print(im.mode) # RGB

ims = Image.open('k.jpg')
print(ims.mode)

im.paste(ims,(0,0))
plt.imshow(im)
plt.show()

图片的mode转换成功

Python用image.paste进行图像处理,粘贴原图的裁剪区域,是黑色的一块_第5张图片

mode转成RGB后的图片显示正常。

综上可以确定就是由于第一张图片的mode不合适造成的。

 

你可能感兴趣的:(python,图像处理)