PIL处理图片融合问题:从opencv读图片,变成4通道的numpy.array类型,再变成PIL.Image.Image类型,最后是两个png格式图片融合

本文探讨如何使用OpenCV读取4通道图片并转换为numpy数组,随后将其转化为PIL.Image对象,最终实现两个PNG图片的融合过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.从opencv读图片为彩色图片backgound,
2.此时的backgound存储格式是BGR,而PIL图片格式是RGB,把backgound变成RGB格式cv2.cvtColor(backgound,cv2.COLOR_BGR2RGB);

3.把backgound变成png图片,增加一层透明度值为255,img为numpy.array类型 
img[:, :, :3] = backgound
img[:, :, 3] = np.full(gray.shape, 255)

4.通过Image.fromarray(np.uint8(img),"RGBA")  把numpy.array变成PIL.Image.Image对象
Image.fromarray(np.uint8(img),"RGBA")

5.通过PIL的Image.alpha_composite函数进行两个png格式图片融合
具体代码如下


import cv2
from PIL import Image
import numpy as np

def blend_two_images2(src,dst):
    """

    :param src: 源图片
    :param dst: 目标图片
    :return: 源图片和目标图片融合的结果,重叠的部分源图片在上,目标图片在下
    """
    if src.mode != 'RGBA':
        src = src.convert('RGBA')
    if dst.mode != 'RGBA':
        dst = dst.convert('RGBA')
    img = Image.alpha_composite(dst, src)
    return img


def generate_chart(gray, back):

    #产生纯色的背景图,位于图片的最底层
    b = 0
    g = 0
    r = 255
    a = 255
    background = np.zeros((gray.shape[0],gray.shape[1],4))
    # background[:, :,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值