蒙版原理以及Python簡單實現
阿新 • • 發佈:2019-01-11
第一次發部落格,就試試看的心態,不喜勿噴~
蒙版可以將兩張毫不相關的圖片合成為一張圖,其實就是使用蒙版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()