蒙版原理以及Python简单实现

第一次发博客,就试试看的心态,不喜勿喷~

蒙版可以将两张毫不相关的图片合成为一张图,其实就是使用蒙版mask对两张图片的像素做了加权平均处理的结果。

       比如对于像素点(x1,y1,v1), (x2,y2,v2)使用的蒙版上相应像素点为(x3,y3,v3),其中x, y表示像素坐标,v表示像素值。则生成的点的像素值为v4=v1*w1+v2*w2. 其中w1=v3/255, w2=1-w1.

       蒙版中像素点越亮(代表像素值越高)或越暗,两个权重w差别就越大,生成图片的混合型就低一些。

附python简单实现代码和效果图

# -*- coding: utf-8 -*-
'''使用的图片都是500*512的rgb格式文件'''
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import os

def synthesize_by_mask(pic_hidden, pic_show, pic_mask):
    '''pic_hidden and pic_show is in rgb mode, pic_mask is in '1' mode. They have been all converted into numpy array'''
    pic_mask /= 255.
    result = np.floor(pic_mask * pic_hidden + (1 - pic_mask) * pic_show) #加权平均
    return result
    
def test_mask():
    os.chdir("E:\\test")
    p1 = Image.open("uu.jpg")
    plt.figure(1)
    plt.subplot(211)
    plt.imshow(p1)
    p1 = np.array(p1, dtype = 'float')
    p2 = Image.open("vv.jpg")
    plt.subplot(212)
    plt.imshow(p2)
    p2 = np.array(p2, dtype = 'float')
    pm = np.tile(np.tile(np.arange(256, dtype = 'float'), 
                         (2,1)).T.reshape([512,1]), (3, 1, 500)).transpose((1, 2, 0))    #生成蒙版,这里是随机的
    result = synthesize_by_mask(p2, p1, pm)
    pr = Image.fromarray(result.astype(np.uint8))
    plt.figure(2)
    plt.imshow(pr)
    
test_mask()
            

猜你喜欢

转载自blog.csdn.net/qq_27061325/article/details/79485220