1. 程式人生 > >蒙版原理以及Python簡單實現

蒙版原理以及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()