您好,登錄后才能下訂單哦!
本篇內容主要講解“Python如何實現圖像合成微縮效果”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python如何實現圖像合成微縮效果”吧!
圖像中的模糊效果可以強烈影響被拍攝場景的感知,模糊在傳達所需的尺寸和距離感方面起著重要作用。合成微縮 (miniature faking
) 是一個使真實大小物體照片看起來像微縮模型照片的過程,也稱為 Diorama Effect/Fillusion
,照片的模糊部分模擬了通常在特寫攝影中通常遇到的近景深度,從而使場景看起來比實際場景小得多。
應用模糊近似于淺的景深可以合成微縮效果。當圖像很大并從短距離觀看時,效果更為明顯。在本節中,我們將學習如何使用 PIL
庫在圖像中創建微縮效果。
使用掩碼可以選擇應重點關注的焦點對象,本節中我們使用的二值掩碼具有在對象交點處為黑色像素,而其他位置為白色像素。將高斯模糊應用到圖像上,然后使用掩碼從原始圖像或模糊圖像中選擇合適的像素。
為了模擬場景效應的深度,需要在圖像中多次應用高斯模糊,然后使用形態學運算腐蝕縮放的掩碼來重復高斯模糊過程,這將在模糊后的掩碼中產生線性梯度。同時,還需要增強圖像的顏色和亮度。
(1) 首先,導入所有必需的庫:
from PIL import Image, ImageEnhance, ImageFilter from scipy.ndimage import binary_erosion from PIL.ImageFilter import GaussianBlur import matplotlib.pyplot as plt, numpy as np
(2) 使用形態學腐蝕縮放后的掩碼圖像,然后通過使用給定半徑迭代應用高斯模糊 GaussianBlur()
。每次重復應用掩碼都會對高斯模糊進行擴大,以確保梯度模糊,并增加模糊程度:
def apply_gradient_blur(image, mask, n=10, radius=1): mask = mask.convert("1") for i in range(n): mask = binary_erosion(np.array(mask), structure=np.ones((10,10)), border_value=1) im_blur = image.filter(GaussianBlur(radius=radius)) image.paste(im_blur, mask=Image.fromarray(mask)) return image
(3) 接下來,根據函數 apply_gradient_blur()
定義函數 create_fake_miniature()
創建合成微縮效果,在函數中,使用 pil.imageenhance
模塊的 Color()
和 Contrast()
函數增強圖像的顏色和對比度,然后使用 apply_gradient_blur()
函數將梯度模糊應用于焦點外部的區域(即對應于掩碼中的白色像素);最后,將增強的圖像(焦點區域)與模糊圖像(焦點外部區域)合并:
def create_fake_miniature(im, custom_mask, color=1.9, contrast=1.4, blur_radius=1.3): # 提高對比度和顏色 edited = ImageEnhance.Contrast(ImageEnhance.Color(im).enhance(color)).enhance(contrast) # 模糊圖像并合并 im_blur = apply_gradient_blur(edited.copy(), mask.copy(), n=50, radius=blur_radius) edited = edited.convert("RGBA") edited.paste(im_blur, mask=mask) return edited
(4) 使用 pil image.open()
函數讀取輸入圖像和掩碼圖像(焦點區域)作為輸入創建合成微縮效果。繪制輸入圖像:
im = Image.open("9.png") mask = Image.open("9_binary.png") out = create_fake_miniature(im, mask) plt.figure(figsize=(20,10)) plt.imshow(im), plt.axis('off'), plt.title('Original image', size=10) plt.show()
(5) 繪制二值掩碼圖像:
plt.figure(figsize=(10,10)) plt.imshow(mask), plt.axis('off'), plt.title('(Bell Whistles) Mask image', size=10) plt.show()
(6) 最后,繪制合成微縮效果輸出圖像如下:
plt.figure(figsize=(20,10)) plt.imshow(out), plt.axis('off'), plt.title('Fake Miniature image', size=10) plt.show()
到此,相信大家對“Python如何實現圖像合成微縮效果”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。